
Solução em C do Problema 9
/*
* SOLUCAO 1: Simples, curta e grossa.
* Testa os numeros 0, 1, 2, ... verifincando
* quais sao multiplos de i ou j.
*
*/
#include <stdio.h>
int main()
{
int i, j, n, /* dados de entrada */
mult, /* candidato a multiplo */
cont; /* conta quantos multiplos foram impressos */
printf("\n\tCalculo dos n primeiros multiplos de i ou de j\n");
printf("\nDigite o numero de multiplos a serem impressos: ");
scanf("%d", &n);
printf("Digite os dois numeros: ");
scanf("%d %d", &i, &j);
/* inicializacoes */
mult = 0;
cont = 0;
printf("Os %d primeiros multiplos de %d ou de %d sao:", n, i, j);
while (cont < n)
{
/* verifica se mult e' multiplo de i ou j */
if (mult%i == 0 || mult%j == 0)
{
printf(" %d", mult);
cont = cont + 1;;
}
/* vamos para o proximo candidato */
mult = mult + 1; /* Hmmm, podia ter escrito mult++; */
}
printf("\n"); /* tire esta linha e veja a diferenca na saida*/
return 0;
}
/*
* SOLUCAO 2: Mais elaborada. Faz menos iteracoes que a anterior.
* A cada iteracao imprime um multiplo de i ou j.
* Usa o comando for.
*/
#include <stdio.h>
int main()
{
int i, j, n, /* dados de entrada */
multi, multj, /* multiplos de i e multiplos de j */
k; /* conta quantos multiplos foram impressos */
printf("\n\tCalculo dos n primeiros multiplos de i ou de j\n");
printf("\nDigite o numero de multiplos a serem impressos: ");
scanf("%d", &n);
printf("Digite os dois numeros: ");
scanf("%d %d", &i, &j);
/* inicializacoes */
multi = 0;
multj = 0;
printf("Os %d primeiros multiplos de %d ou de %d sao:", n, i, j);
for (k = 0; k < n; k++)
{
if (multi < multj)
{
printf(" %d", multi);
multi = multi + i;
}
else
{
printf(" %d",multj);
if (multi == multj)
{
multi = multi + i;
}
multj = multj + j;
}
}
printf("\n");
return 0;
}
/*
* SOLUCAO 3: Essencialmente igual a SOLUCAO anterior.
* Os casos: (1) multi < multj;
* (2) multi > multj; e
* (3) multi == multj
* estao mais evidentes.
*/
#include <stdio.h>
int main()
{
int i, j, n, /* dados de entrada */
multi, multj, /* multiplos de i e multiplos de j */
k; /* conta quantos multiplos foram impressos */
printf("\n\tCalculo dos n primeiros multiplos de i ou de j\n");
printf("\nDigite o numero de multiplos a serem impressos: ");
scanf("%d", &n);
printf("Digite os dois numeros: ");
scanf("%d %d", &i, &j);
/* inicializacoes */
multi = 0;
multj = 0;
printf("Os %d primeiros multiplos de %d ou de %d sao:", n, i, j);
for (k = 0; k < n; k++)
{
if (multi < multj) /* Caso 1. multi < multj */
{
printf(" %d", multi);
multi = multi + i;
}
else if (multi > multj) /* Caso 2. multi > multj */
{
printf(" %d", multj);
multj = multj + j;
}
else /* Caso 3. multi == multj */
{
printf(" %d", multj);
multi = multi + i;
multj = multj + j;
}
}
printf("\n");
return 0;
}
/*
* SOLUCAO 4: Igual a SOLUCAO anterior com um par de chaves (superfluas)
* extras. Talvez isto torne o codigo mais legivel para alguns.
*
*/
#include <stdio.h>
int main()
{
int i, j, n, /* dados de entrada */
multi, multj, /* multiplos de i e multiplos de j */
k; /* conta quantos multiplos foram impressos */
printf("\n\tCalculo dos n primeiros multiplos de i ou de j\n");
printf("\nDigite o numero de multiplos a serem impressos: ");
scanf("%d", &n);
printf("Digite os dois numeros: ");
scanf("%d %d", &i, &j);
/* inicializacoes */
multi = 0;
multj = 0;
printf("Os %d primeiros multiplos de %d ou de %d sao:", n, i, j);
for (k = 0; k < n; k++)
{
if (multi < multj) /* Caso 1. multi < multj */
{
printf(" %d", multi);
multi = multi + i;
}
else
{
if (multi > multj) /* Caso 2. multi > multj */
{
printf(" %d", multj);
multj = multj + j;
}
else /* Caso 3. multi == multj */
{
printf(" %d", multj);
multi = multi + i;
multj = multj + j;
}
}
}
printf("\n");
return 0;
}
História
da Computação | Listas de
Exercícios | Problemas Resolvidos | macmulti@ime.usp.br