Ir ao conteúdo

Posts recomendados

Postado

Por Favor

 

O erro é o seguinte quando tem um número negativo ele está imprimindo exemplo de entrada e sua divada saída:

 

A condição do não e sim é a seguinte se o numero k nesse caso de teste é o 2.

 

O vetor tem que conter número maior que ZERO

 

Entrada:

4 2

0 -1 2 1

Saída:

NAO

2

1

 

Código

 

#include <stdio.h>

void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}

void insertionSort(int n, int vet[]){
    int i,j, menor, indMenor;
    //para cada elemento i do vetor
        for (i=0; i<n-1; i++) {
    menor=vet;
        indMenor=i;
        //procurar o i-esimo menor guardar o seu valor e de seu indice, respectivamente em menor e indMenor
        for(j=i;j<n;j++){
            if (vet[j] > menor) {
                menor=vet[j];
                indMenor=j;
            }
        }
         //O i-esimo menor esta na variavel menor trocar de posicao os elementos vet com vet[indMenor]
        troca(&vet, &vet[indMenor]);
    }
}

int main(){
    int n, k, i, j, cont, vetor[1000];

    while (1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor);
    }
    for(i = 0; i < n; i++){
        if(vetor > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            printf("%d\n", vetor);
        }   
    }
    else{
        printf("SIM\n");
    }
}

  • Curtir 1
Postado

Um professor X tem uma turma de N alunos. Frustrado com a falta de disciplina, ele decide cancelar a
aula se menos de K alunos estão presentes quando a aula começa. Dado o tempo de chegada de cada aluno,
determinar se a aula é cancelada. Caso a aula não seja cancelada, imprima uma lista com os alunos que
chegaram antes do início da aula em ordem contrária à mostrada na entrada.

 

Entrada

 

A primeira linha apresenta dois números inteiros separados por um espaço: N (alunos da turma) e K
(mínimo de presenças para que a aula não seja cancelada), com 0 ≤ N, K, ≤ 1000. Na segunda linha há
N inteiros separados por espaços (A1 , A2 ,... , An ) descrevendo os tempos de chegada para cada aluno.
Suponha que esta ordem seja a mesma da lista de presença do professor, com o primeiro aluno descrito na
entrada sendo o aluno 1 e assim por diante. Nota: horários de chegada não-positivos (Ai ≤ 0) indicam que
o aluno chegou cedo ou na hora; horários de chegada positivos (Ai>0) indicam o aluno chegou Ai minutos
tarde.

 

Saída

 

O programa apresenta uma mensagem com a palavra “SIM” se a aula é cancelada, e “NAO” caso
contrário. Após imprimir a mensagem quebre uma linha. Se a aula não for cancelada, imprima os M alunos
presentes antes do início da aula (ou seja, com Ai ≤ 0) na ordem contrária da lista de entrada.
 

  • Curtir 1
Postado

#include <stdio.h>
    
void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}
    
void insertionSort(int n, int vet[]){
    int i,j, menor, indMenor;
    for (i=0; i<n-1; i++) {
        menor=vet;
        indMenor=i;
        for(j=i;j<n;j++){
            if (vet[j] > menor) {
                menor=vet[j];
                indMenor=j;
            }
        }
        troca(&vet, &vet[indMenor]);
    }
}
    
int main(){
    int n, k, i, j, cont, vetor[1000];
    
    while (1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor);
    }
    for(i = 0; i < n; i++){
        if(vetor > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            if(vetor > 0){
                printf("%d\n", vetor);
            }
        }   
    }
    else{
        printf("SIM");
    }
}

 

De 11 teste passou em apenas 4

  • Obrigado 1
Postado
15 horas atrás, Eduardo_Braz disse:

#include <stdio.h>
    
void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}
    
void insertionSort(int n, int vet[]){
    int i,j, menor, indMenor;
    for (i=0; i<n-1; i++) {
        menor=vet;
        indMenor=i;
        for(j=i;j<n;j++){
            if (vet[j] > menor) {
                menor=vet[j];
                indMenor=j;
            }
        }
        troca(&vet, &vet[indMenor]);
    }
}
    
int main(){
    int n, k, i, j, cont, vetor[1000];
    
    while (1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor);
    }
    for(i = 0; i < n; i++){
        if(vetor > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            if(vetor > 0){
                printf("%d\n", vetor);
            }
        }   
    }
    else{
        printf("SIM");
    }
}

 

De 11 teste passou em apenas 4

:(

  • Obrigado 1
Postado

Eu encontrei o erro só que eu não sei resolver é o seguinte ele tem que achar o índice dos números igual ou menor a ZERO só que não estou conseguindo pegar os mesmo...

adicionado 1 minuto depois
agora, Eduardo_Braz disse:

Eu encontrei o erro só que eu não sei resolver é o seguinte ele tem que achar o índice dos números igual ou menor a ZERO só que não estou conseguindo pegar os mesmo...

Em ordem decrescente..

  • Curtir 1
Postado

Eu meio que arrumei porém:

 

A saída que eu conseguir com a entrada sendo

10 4
-93 -86 49 -62 -90 -63 40 72 11 67:

NAO

1

3

4

5

10

 

e a saída que era para ser:

Saída

NAO
6

5

4

2

1

 

#include <stdio.h>

int main(){

    int n, k, i, j, cont, vetor[1000], aux, po;

    while (1){
        
        scanf("%d %d", &n, &k);
        
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            
            break;
            
        }
    }

    for(i = 0; i < n; i++){
        
        scanf("%d", &vetor);
        
    }

    for(i = 0; i < n; i++){
    
        if(vetor <= 0){
            cont++;
        }
    }

    if(cont >= k){
        printf("NAO\n");
        for(i=1; i<=n; i++){
            if (vetor <= 0){
                aux = vetor;
                po=i;                 
                printf("%d\n", po);
            }
        }
    }

    else{
        printf("SIM\n");
    }
}

  • Curtir 1
Postado

@Eduardo_Braz     seu código está bom , e para postar seu código é melhor usar o botão <> que está desenhado lá na barra de ferramentas da janela de postar 

478025385_barradeferramentas.JPG.0a2f72c92eade8e459ff098a361318f3.JPG

pois senão seu código fica faltando alguns caracteres como os  [ i ]  que sumiram do seu código  ,  e se colocar em ordem decrescente resolve então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <conio.h>    
void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}
    
void insertionSort(int n, int vet[]){
    int i,j,aux,menor, indMenor     ;
    for (i=0; i<n-1; i++          ){
        for(j=i+1;j<n;j++         ){
            if( vet[j] > vet[i]   ){
                aux    = vet[i]    ;
                vet[i] = vet[j]    ;
                vet[j] = aux       ;
            }
        }
    }
}
int main(){
    int n, k, i, j, cont, vetor[1000];
    while(1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor[i]);
    }
    for(i = 0; i < n; i++){
        if(vetor[i] > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            if(vetor > 0){
                printf("%d\n", vetor[i]);
            }
        }   
    }
    else{
        printf("SIM");
    }
    getch();
}

 

Postado
1 minuto atrás, devair1010 disse:

@Eduardo_Braz     seu código está bom , e para postar seu código é melhor usar o botão <> que está desenhado lá na barra de ferramentas da janela de postar 

478025385_barradeferramentas.JPG.0a2f72c92eade8e459ff098a361318f3.JPG

pois senão seu código fica faltando alguns caracteres como os  [ i ]  que sumiram do seu código  ,  e se colocar em ordem decrescente resolve então seu código com algumas modificações poderia ser assim  :


#include <stdio.h>
#include <conio.h>    
void troca(int* a, int*b){
    int aux;
    aux=*a;
    *a=*b;
    *b=aux;
}
    
void insertionSort(int n, int vet[]){
    int i,j,aux,menor, indMenor     ;
    for (i=0; i<n-1; i++          ){
        for(j=i+1;j<n;j++         ){
            if( vet[j] > vet[i]   ){
                aux    = vet[i]    ;
                vet[i] = vet[j]    ;
                vet[j] = aux       ;
            }
        }
    }
}
int main(){
    int n, k, i, j, cont, vetor[1000];
    while(1){
        scanf("%d %d", &n, &k);
        if(n <= 1000 && n >= 0 && k <= 1000 && k >= 0){
            break;
        }
    }
    for(i = 0; i < n; i++){
        scanf("%d", &vetor[i]);
    }
    for(i = 0; i < n; i++){
        if(vetor[i] > 0){
            cont++;
        }
    }
    if(cont >= k){
        printf("NAO\n");
        for(i = 0; i < n; i++){
            insertionSort(n, vetor);
            if(vetor > 0){
                printf("%d\n", vetor[i]);
            }
        }   
    }
    else{
        printf("SIM");
    }
    getch();
}

 

Muito obrigado pela a dica de postagem, vou estudar o seu código aqui muito obrigado mesmo

 

adicionado 3 minutos depois
2 minutos atrás, Eduardo_Braz disse:

if(cont >= k){ printf("NAO\n"); for(i = 0; i < n; i++){ insertionSort(n, vetor); if(vetor > 0){ printf("%d\n", vetor[i]); } } }

nessa parte tem como eu pegar o indice onde os números aparece?

  • Curtir 1
Postado
agora, devair1010 disse:

@Eduardo_Braz   o indice é o valor da variável   i    que controla o loop for .

Assim se eu colocar para imprimir o i então pode dá certo ?

 

adicionado 4 minutos depois
4 minutos atrás, devair1010 disse:

@Eduardo_Braz   o indice é o valor da variável   i    que controla o loop for .

Fiz o teste mais não funcionou. :(

  • Curtir 1
Postado

@devair1010Não conseguir pegar os índices.

adicionado 9 minutos depois
7 minutos atrás, Eduardo_Braz disse:

@devair1010Não conseguir pegar os índices.

ele só pega o 1 e 4 quando o teste:

Entrada:

4 2

0 -1 2 1

Saída:

1 2

e ordenar o índice em ordem decrescente

adicionado 10 minutos depois

image.png

  • Obrigado 1
Postado
if(cont >= k){
        printf("NAO\n");
        for(i = 1; i <= n; i++){
            if(vetor[i] <= 0){
                printf("%d\n", vetor[i]);
            }
        }
    }

 O erro está nessa parte o iniciado pede os índices das ocorrências quando a condição for verdadeira.

Quando eu troco o vetor somente por i ele imprime 1 e o 4 não entendo porque alguém poderia me ajudar nessa parte.

 

Entrada:

4 1

0 -1 2 1 (Índice 1  é o  0)

             (Índice 2  é o -1)

             (Índice 3  é o  2)

             (Índice 4  é o  1)

 

Quando eu faço a troca:

Saí assim:

 

1

4

 

O correto pelo o que eu coloquei acima séria:

 

1

2

 

Eu teria que colocar em ordem decrescente tudo o que eu já testei não funcionou, gostaria ver com vocês.

 

Por fim ficaria assim:

 

2

1

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...