/* * 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; }
![]() |