Buscar

AJUDA PARA CRIAR UM ALGORITMO QUE ADIVINHA O NUMERO QUE O USUÁRIO PENSOU

Tarefa:

Criar um algoritmo capaz de adivinhar o número que o usuário pensou, apenas partindo dos seguintes questionamentos para o usuário:

- O número atual é par?

- O número atual é impar?

- O número atual é um?

Fluxo Sugerido:

1. Perguntar ao usuário se o número pensado é par ou ímpar. Após a resposta, se for par, pedir ao usuário que divida o número por 2. Se for ímpar, pedir ao usuário que subtraia 1, e que então divida o resultado por 2.

2. Perguntar então se o novo resultado obtido é par ou ímpar.

3. O procedimento continua com cada novo resultado. Isto é, sistema pergunta se o número resultante é par ou ímpar e, após a resposta, deve pedir para o usuário repetir o procedimento descrito no item 1.

4. O sistema deve parar quando o usuário responder que o número é impar e igual a 1, encerrando as perguntas, e revelar imediatamente o número pensado pelo usuário.

💡 2 Respostas

User badge image

Elves Mateus Rodrigues Mateus

A ideia é vc usar uma pilha e meio que fatorar, não sei se é o melhor termo, o número. Por exemplo, seja n = 10, n pode ser reescrito como n = 10 = 2(1 + 2(2)). Então daria pra vc fazer uma pilha capaz de gerar o resultador para n. Não sei se já viu recursão, mas na verdade ela nada mais é que uma pilha, então daria pra vc usar recursão ou criar a sua própria pilha. O código abaixo fiz por recursão, pois o código para gerar uma pilha é meio longo, recursão seria melhor. 

#include <stdio.h>
#include <ctype.h> 
#include <string.h>

int n;
char resposta[4];
char sim[] = "SIM";
char nao[] = "NAO";

void strUpper(char *str){//converte uma string para maisculo, ajuda na comparacao
    int i;
    for(i=0;i<strlen(str);i++) str[i] = toupper(str[i]);
}

int adivinha(){
    printf("\n-> O numero atual é par? [SIM/NAO]\n");
    scanf("%s", resposta);

    strUpper(resposta);

    if(!strcmp(resposta, sim)){
        printf("\n-> ! DIVIDA O NUMERO ATUAL POR 2\n");
        return 2*adivinha();
    } 
    else if (!strcmp(resposta, nao)){
        printf("\n-> ! O NUMERO NAO EH PAR, LOGO, EH IMPAR\n");
        
        printf("\n-> O numero atual é 1? [SIM/NAO]\n");
        scanf("%s", resposta);

        strUpper(resposta);

        if(!strcmp(resposta, sim)){
            return 1;
        }else if (!strcmp(resposta, nao)){
            printf("\n-> ! SUBTRAIA 1 DO NUMERO ATUAL E DIVIDA O RESULTADO POR 2\n");
            return 1 + 2*adivinha();
        } else{
            printf("\nDigite apenas 'SIM' ou 'NAO'\n");
        }
    } else{
        printf("\nDigite apenas 'SIM' ou 'NAO'\n");
    }    
}

int main(int argc, char const *argv[]){
    
    printf("\nO numero que pensou foi: %d\n", adivinha());
    return 0;
}

Acho que seria isso, espero ter ajudado um pouco...

2
Dislike0
User badge image

RD Resoluções

O algoritmo será:

#include <stdio.h>

#include <ctype.h>

#include <string.h>

int n;

char resposta[4];

char sim[] = "SIM";

char nao[] = "NAO";

void strUpper(char *str){//converte uma string para maisculo, ajuda na comparacao

int i;

for(i=0;i<strlen(str);i++) str[i] = toupper(str[i]);

}

int adivinha(){

printf("\n-> O numero atual é par? [SIM/NAO]\n");

scanf("%s", resposta);

strUpper(resposta);

if(!strcmp(resposta, sim)){

printf("\n-> ! DIVIDA O NUMERO ATUAL POR 2\n");

return 2*adivinha();

}

else if (!strcmp(resposta, nao)){

printf("\n-> ! O NUMERO NAO EH PAR, LOGO, EH IMPAR\n");

printf("\n-> O numero atual é 1? [SIM/NAO]\n");

scanf("%s", resposta);

strUpper(resposta);

if(!strcmp(resposta, sim)){

return 1;

}else if (!strcmp(resposta, nao)){

printf("\n-> ! SUBTRAIA 1 DO NUMERO ATUAL E DIVIDA O RESULTADO POR 2\n");

return 1 + 2*adivinha();

} else{

printf("\nDigite apenas 'SIM' ou 'NAO'\n");

}

} else{

printf("\nDigite apenas 'SIM' ou 'NAO'\n");

}

}

int main(int argc, char const *argv[]){

printf("\nO numero que pensou foi: %d\n", adivinha());

return 0;

}

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis


✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta.

User badge image

Outros materiais