Ir ao conteúdo
  • Cadastre-se

C++ Faca um algoritmo que encontre o primeiro multiplo de 11, 13 ou 17 após um númer


Posts recomendados

  • 3 anos depois...

Sei que a pergunta é meio antiga, mas melhor um pergunta antiga respondida do que uma eterna duvida.

Eu fiz esse programa em C, e aqui vai uma explicação rapidinha do que eu fiz:

Primeiro, temos que entender a pergunta. Ele quer que achar os primeiros múltiplos de 11, 13 e 17 a partir de um numero digitado pelo usuário, sendo assim temos que ler esse numero e começar a contar a partir dele e achar os primeiros múltiplos dos números 11, 13, 17 (não nessa ordem especificamente). O que eu fiz foi, ler o numero do usuário, usar um loop while, uma variável que conta os divisores (nós só queremos 3, o primeiro de 11, 13 e 17), criei um vetor (array) para guardar os múltiplos (sendo a posição 0 para o 11, a 1 para o 13 e a 2 para o 17) e usei a logica de que se o numero for divisível for tal(11, 13 ou 17) e a posição do vetor estiver valendo 0, ele vai atribuir o valor de i para aquela posição do array e vai contar +1 para os divisores. A posição do vetor estar zerada quer dizer que ainda não foi atribuído nenhum numero para lá, e se ela não for 0 quer dizer que o primeiro múltiplo já foi descoberto.

 

Código:
 

#include <stdio.h>

int main()
{
    int i, numero, divisores, multiplos[3];

    for (i = 0; i < 3; i++)
    {
        multiplos[i] = 0;
    }

    printf("Numero: ");
    scanf("%d", &numero);

    divisores = 0;
    i = numero;
    while (divisores < 3)
    {
        if (i % 11 == 0 && multiplos[0] == 0)
        {
            multiplos[0] = i;
            divisores++;
        }

        if (i % 13 == 0 && multiplos[1] == 0)
        {
            multiplos[1] = i;
            divisores++;
        }

        if (i % 17 == 0 && multiplos[2] == 0)
        {
            multiplos[2] = i;
            divisores++;
        }

        i++;
    }

    printf("primeiro multiplos (11,13,17): %d, %d, %d", multiplos[0], multiplos[1], multiplos[2]);

    return 0;
}

 

Para traduzir para o C++ é o só trocar a biblioteca padrão para iostream e printf e scanf por cout e cin (lembrando de fazer as devidas alterações como using namespace std; e <<, >>).

Código no GitHub:

https://github.com/phzsantos/Learning_C/blob/main/02 - Estruturas de repeticao/Exercicios/26 - Exercicio.c

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
Em 03/04/2018 às 14:31, Bianca Gomes disse:

Faça um algoritmo que encontre o primeiro múltiplo de 11, 13 ou 17 após um número dado (lido) no dev c++

 

@phzsantos, vamos tentar reabordar o tema:
 

1 hora atrás, phzsantos disse:

Primeiro, temos que entender a pergunta.

 

 

Sobre:

1 hora atrás, phzsantos disse:

Ele quer que achar os primeiros múltiplos de 11, 13 e 17 a partir de um numero digitado pelo usuário,

 

Então, pelo que eu entendi, ele não quer "e" (conjunção), ele pediu simplesmente o primeiro para para um dos casos... seria "ou" (disjunção) mesmo. Observação: mesmo se fosse "e", seria "o múltiplo", no singular, ou seja, "o" primeiro para cada número.

 

Entendi assim:

leu 10? A resposta será 11

leu 12345? A resposta será 12350

leu 13? A resposta será 17

etc

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas Rapaz, pior que eu errei mesmo hehe, refiz o código e ficou ainda mais simples. O código anterior fica pra quem quer os 3 primeiros múltiplos dos 3 números a partir do número fornecido pelo usuário.
 

#include <stdio.h>

int main()
{
    int i, numero, divisor, multiplo;

    printf("Numero: ");
    scanf("%d", &numero);

    divisor = 0;
    for (i = numero; divisor < 1; i++)
    {
        if (i % 11 == 0 || i % 13 == 0 || i % 17 == 0)
        {
            multiplo = i;
            divisor++;
        }
    }

    printf("Primeiro multiplo: %d", multiplo);

    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Midori Realmente bem mais simples. Eu ainda não cheguei nesse nível aí hehe.

 

E meu algoritmo ainda está errado. Ele pega o primeiro múltiplo, até se ele for o próprio número digitado. Por exemplo:

 

Número digitado: 11

Ele pega o 11 como primeiro múltiplo. O certo seria ele pegar o 13. 

 

Pra corrigir isso no meu código, é só na hora de atribuir o i, colocar i = número + 1. Porém, vou trocar para a forma que você colocou acima, bem mais simples. Não conhecia esse operador "+=" e também não conhecia essa forma de escrever uma condicional sem comparar valores.

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 hora atrás, phzsantos disse:

Número digitado: 11

Ele pega o 11 como primeiro múltiplo. O certo seria ele pegar o 13. 


Já ia comentar, seria do próximo em diante. Exemplo:

 

#include <stdio.h>

int main()
{
    int i, numero, multiplo, achou;

    printf("Numero: ");
    scanf("%d", &numero);

    achou = 0;
    
    for (i = numero+1; !achou; i++)
    {
        if (i % 11 == 0 || i % 13 == 0 || i % 17 == 0)
        {
            multiplo = i;
            achou = 1;
        }
    }

    printf("Primeiro multiplo: %d", multiplo);

    return 0;
}

 


Baseando-se pelo código do @Midori:

 

#include <stdio.h>

int main()
{
    int i, numero;

    printf("Numero: ");
    scanf("%d", &numero);

    i = numero;
    
    do {
        i += 1;
    } while (!(i % 11 || i % 13 || i % 17));

    printf("Primeiro multiplo: %d", i);

    return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@phzsantos Todos os loops (while/do...while/for) vão rodar enquanto a parte da expressão testar verdadeira. Em C tudo que é diferente de zero é verdadeiro e o que é zero é falso. Na expressão AND (&&) só existe verdade quando os operandos forem verdadeiros, então no tesde dos módulos o loop encerra quando qualquer um retornar o resto zero.

32 minutos atrás, Simon Viegas disse:
} while (!(i % 11 || i % 13 || i % 17));

Assim não dá certo porque OR vai ser verdadeiro inclusive para todos os módulo com resto. E o loop termina ao negar isso.

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas Usando a lógica de @Midori eu fiz o código desse jeito:
 

#include <stdio.h>

int main()
{
	int numero;

	printf("Numero: ");
	scanf("%d", &numero);

	do
	{
		numero++;
	}
	while (numero % 11 && numero % 13 && numero % 17);

	printf("Primeiro multiplo: %d", numero);

	return 0;
}


Eu não usei o operador += porque não precisava nessa ocasião, mas com certeza irei fazer o uso dele em outras situações no futuro.

  • Confuso 1
Link para o comentário
Compartilhar em outros sites

2 horas atrás, phzsantos disse:
    while (numero % 11 && numero % 13 && numero % 17);

 

 

numero % n vale algo entre 0 e n exclusive.

 

Se o resto for 0 a condição é falsa. E aí será múltiplo de n por definição. Muito ruim de ler assim. Evite esse tipo de expressão. Tem muita coisa subentendida e não é bom para ninguém. Mas está certo.

 

 

TESTE sempre o retorno de scanf() em especial quando está começando e pode simplesmente sair fora no primeiro erro...

 

note que em C pode usar OR AND e NOT como em C++ se incluir iso646.h. E é mais legível, em especial o notebook porque é difícil achar uma '!' no meio de uma expressão.

 

Nunca escreva um programa interativo se não precisa e enquanto não precisa. Teste assim por exemplo, usando aritmética e recortar e colar....

 

 

#include <iso646.h>
#include <stdio.h>

int main(void)
{
    int numero = 1;
    printf("Numero = %d\n", numero);
    do { numero++; } while ( numero % 11 and numero % 13 and numero % 17);
    printf("Primeiro multiplo: %d\n", numero);

    numero = 12;
    printf("Numero = %d\n", numero);
    do {
        numero++;
    } while (numero % 11 and numero % 13 and numero % 17);
    printf("Primeiro multiplo: %d\n", numero);

    numero = 14;
    printf("Numero = %d\n", numero);
    do {
        numero++;
    } while (numero % 11 and numero % 13 and numero % 17);
    printf("Primeiro multiplo: %d\n", numero);

    return 0;
}

 

que mostra

 

Numero = 1
Primeiro multiplo: 11
Numero = 12
Primeiro multiplo: 13
Numero = 14
Primeiro multiplo: 17

 

Link para o comentário
Compartilhar em outros sites

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...