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;
}


Lista de Problemas

História da Computação | Listas de Exercícios | Problemas Resolvidos | macmulti@ime.usp.br