diff --git a/lista-08/04/enunciado.txt b/lista-08/04/enunciado.txt index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d1b1a49621a76fd0825736f125a4fd370e23530c 100644 --- a/lista-08/04/enunciado.txt +++ b/lista-08/04/enunciado.txt @@ -0,0 +1,60 @@ +Faça um programa em Free Pascal que leia um número natural 0 < n ≤ 100 e em seguida leia uma sequência de n números também naturais. Seu programa deve verificar se existem duas subsequências iguais nesta sequência com tamanho pelo menos 2. O tamanho da sequência encontrada deverá ser máximo, se ela existir. Caso exista, seu programa deve imprimir o valor do ı́ndice i e do tamanho máximo da sequência m, nesta ordem, onde i é a primeira ocorrência da sequência que possui uma cópia na sequência original e m é o tamanho desta sequência que se repete. Caso contrário seu programa deve imprimir "nenhuma". + +Os casos de teste não conterão entradas com mais de uma subsequência igual. + +Exemplo de entrada 1: +8 +7 9 5 4 5 5 4 6 + +Saı́da esperada para a entrada acima: +3 2 + +Exemplo de entrada 2: +12 +2 7 9 5 2 5 4 8 6 2 5 4 + +Saı́da esperada para a entrada acima: +5 3 + +Sugestão: +Use como base para sua implementação a seguinte estrutura inicial de programa, que contém o programa principal e algumas funções e procedimentos que visam facilitar o seu trabalho. Evidentemente você pode ignorar esta sugestão. Caso aceite, você deve implementar as funções e procedimentos, o programa principal não deveria ter que ser alterado, a princı́pio. Você pode também decidir usar mais funções e procedimentos caso perceba que seu programa ficará mais legı́vel. + + +program escolha_um_nome_bom; + +const MAX = 100; + +type vetor = array [1..MAX] of longint; + +var + v : vetor; + n, pos, tamanho_subsequencia: longint; + +procedure ler_vetor (var v: vetor; n: longint); +(* procedure para ler um vetor "v" de "n" inteiros *) + +function tem_subsequencia_iguais (var v: vetor; n, tam_seg: longint): longint; +(* +recebe uma subsequencia "v" que em tamanho "n" e procura por subsequencias +iguais de tamanho "tam_seg". A funcao devolve zero se nao encontrou +subsequencias iguais ou devolve a posicao do inicio da primeira subsequencia +que encontrou. +*) + +(* programa principal *) +begin + read (n); + // tamanho da subsequencia a ser lido + ler_vetor (v,n); + pos:= 0; + tamanho_subsequencia:= n div 2; // inicia com maior valor possivel + while (pos = 0) and (tamanho_subsequencia >= 2) do + begin + pos:= tem_subsequencia_iguais (v,n,tamanho_subsequencia); + tamanho_subsequencia:= tamanho_subsequencia - 1; + end; + if pos > 0 then + writeln (pos,’ ’,tamanho_subsequencia+1) + else + writeln ('nenhuma'); +end.