Ir ao conteúdo
  • Cadastre-se

Maior seqüência de números iguais em um vetor...


claraaa

Posts recomendados

É o seguinte... HELP-ME xD

minha tentativa:

depois de todos os números inseridos em um vetor... fiz outro for p/ não confundir mais ainda.

    for i:=0 to 9 do
begin
if (vetor[i]=vetor[i+1]) then
quantidade = quantidade +1;
end;

Isso Não Está CERTOOOOOOOOOOOOOO

porque ele sempre vai contar quando estiver dois números iguais..

aiaiai (alguma alma viva p/ me ajudar) valeu :wacko:

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá, seja bem vinda ao Fórum do Clube do Hardware!

Eu fiz o seguinte código:

Program Pzim ;
var
i,maiortemp,maiorfinal,atual,numeroseq:integer;
n:array[1..10] of integer;
Begin
N[1] := 10;
N[2] := 9;
N[3] := 8;
N[4] := 7;
N[5] := 6;
N[6] := 5;
N[7] := 4;
N[8] := 3;
N[9] := 2;
N[10] := 1;
atual := N[1];
Maiorfinal := 1;
Maiortemp := 1;
NumeroSeq := 0;
for i := 2 to 10 do
begin
if N[i] = atual then
maiortemp := maiortemp+1
else
begin
atual := N[i];
maiortemp := 1;
end;
if maiortemp > maiorfinal then
begin
maiorfinal := maiortemp;
numeroseq := atual;
end;
end;
if MaiorFinal = 1 then
WriteLn('Não existem numeros repetidos.')
else
begin
WriteLn('A maior sequencia de numero é: ', Maiorfinal);
WriteLn('O numero da maior sequencia é: ', Numeroseq);
end;
End.

Testei algumas vezes com diversos valores, funcionou.

Agora, são 3h30 da manha então talvez tenha um jeito mais rápido/fácil de se fazer isso..

Note que a declaração dos valores dos vetores eu fiz para poder ir testando o código e vendo se atendia as espectativas. Talvez você precise de uma entrada.. mas a ideia é só dar uma luz ;)

Bem.. como funciona o código?

Basicamente o resultado final (O maior numero de sequencia e qual numero foi) é armazenado nas variaveis MaiorFinal e NumeroSeq.

Precisamos saber 2 sequencias: a atual, e a "maior até então".. para isso, precisamos trabalhar com variaveis "temporarias".. que no caso é a Maiortemp e a Atual

Definimos, logo no começo, seus valores (com comentarios):

atual := N[1]; // Não precisamos começar o loop do vetor[1].. Para otimização do código, dizemos que a maior sequencia e o numero atual dessa sequencia é igual o vetor[1]. Se o proximo for igual, ele acrescenta. Se não for, muda seus valores para como deveria ser.

Maiorfinal := 1;

Maiortemp := 1;

NumeroSeq := 0;

Tendo essa base, precisamos percorrer o resto do vetor atrás de descobrir se o vetor[2] é igual o vetor[1] (aumentando nossa sequencia) ou/e se teremos outra sequencia.

Veja o seguinte código no começo do loop:

[COLOR="red"]     if N[i] = atual then
maiortemp := maiortemp+1[/COLOR]
[COLOR="Blue"] else
begin
atual := N[i];
maiortemp := 1;
end; [/COLOR]

Se o numero do vetor for igual o atual (basicamente, atual = vetor[i-1]), ou seja, da sequencia atual, a sequencia temporaria (pois ela pode não ser a maior até então) recebe mais um.

Caso contrario (o numero não é igual) temos um fim de sequencia. Mudamos então, o numero da sequencia atual para o novo numero e voltamos essa sequencia (temporaria) para 1 (apenas ele mesmo)

Agora, se os numeros forem sendo iguais precisamos deixar isso "gravado". Pois, caso apareça um valor diferente perderemos como vimos acima.

Sendo assim, adicionamos ao final de cada volta do loop:

	if maiortemp > maiorfinal then
begin
maiorfinal := maiortemp;
numeroseq := atual;
end;

Se essa sequencia temporaria for maior que a nossa sequencia máxima até agora (que começa como 1: ou seja, sem sequencia) ela passa a ser nossa sequencia maxima. (entretanto ela não deixa de ser, ainda, temporaria, pois ainda não acabou) e o numero da maior sequencia é o numero dessa sequencia.

Ao fim do loop, vamos exibir os resultados:

  if MaiorFinal = 1 then
WriteLn('Não existem numeros repetidos.')
else
begin
WriteLn('A maior sequencia de numero é: ', Maiorfinal);
WriteLn('O numero da maior sequencia é: ', Numeroseq);
end;

Se a maior sequencia é 1 (isso significa que todos os valores do vetor são diferentes) simplesmente não temos uma sequencia. Logo, exibe-se a mensagem informando isso. Caso contrario, se tivermos uma sequencia, simplesmente mostramos qual foi o numero e quantas vezes ele se repetiu..

Espero que tenha entendido.

Qualquer dúvida só postar.

PS Importante: se tivermos 2 sequencias, por exemplo: 2 numeros 3, e 2 numeros 6 o programa exibirá que a maior sequencia é 2 e que o numero é o 3, pois apareceu primeiro (logo, a sequencia 6 6 não conseguiu ser superior a sequencia 3 3: foi igual). Deixo para você resolver isso ;)

Abraços!

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Curso de Hacker Ético

LANÇAMENTO!

CLIQUE AQUI E CONFIRA!

* Este curso não é ministrado pela equipe do Clube do Hardware.