Solução em C do Problema 16

#include <stdio.h>

#define MAX 100
#define FALSE 0
#define TRUE  1

int main() {

  int n,         /* comprimento da sequencia dada    */ 
      i, j,
      m,         /* comprimento do segmento repetido */
      seq[MAX],  
      achou;     

  printf("Digite o comprimento da sequencia: ");
  scanf("%d", &n);
  printf("Digite uma sequencia de %d inteiros: ", n);
  for (i = 0; i < n; i++)
    scanf("%d", &seq[i]);

  achou = FALSE;

  for (m = 1; !achou && m <= n/2; m++) {
    /* procura dois segmentos iguais de comprimento m consecutivos */
    for (i = 0; !achou && i <= n-2*m; i++) {
      /* i indica o inicio do primeiro segmento        */
      /* testa se os dois segmentos sao de fato iguais */
      achou = TRUE;
      for (j = 0; achou && j < m; j++) 
	if (seq[i+j] != seq[i+m+j])
	  achou = FALSE;
    }
  }

  if (achou) {
    printf("Sim, existem dois segmentos iguais consecutivos.\n");
    printf("Tome, por exemplo, i = %d e m = %d.\n", i-1, m-1);
  }
  else
    printf("Nao, nao existem dois segmentos iguais consecutivos.\n");

  return 0;
}


Lista de Problemas

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