Ir ao conteúdo
  • Cadastre-se

C++ Código para reconhecer repetição de variáveis num vetor


Posts recomendados

#include <iostream>

using namespace std;

int main () {

int N, i, j, k, tamanho, M, maior, Rep, Aux=0;
cin>>N;
int Rifa[N];
for(i=0;i<N;i++) {
cin>>Rifa[i];
}
M=N;
int Rept[M];
 for(j=0;j<M;j++) {
   Rept[j]=0; 
 }
  for(j=0;j<M;j++) {
  inicio: for(i=0;i<N;i++) {
    if(Rifa[i-1]==Rifa[i]) {
       M=N-1;
       goto inicio;
    }
Aux=Rifa[i];
Rept[j]=Aux;
          } 
  }
 tamanho=M;

}

Boa noite, pessoal. Estou fazendo uma matéria de introdução a linguagem de programação e, nesse momento, estou empacado numa questão da lista de vetores.

Essa questão pede que a primeira linha da entrada seja uma quantidade N de rifas, as quais fazem parte de um sorteio, e a segunda linha consistirá de N entradas (rifas) compradas pelos compradores, os quais serão identificados por números inteiros (chamarei esse número associado ao comprador de identificador) . O número de identificadores pode repetir. O vencedor do sorteio será aquele que comprar a maior quantidade de rifas, porém, caso haja empate, o vencedor será aquele com o maior identificador.

 

Exemplo de teste:

Entrada

5

1 1 2 3 3

Saída

3

 

Então, minha ideia foi fazer um loop interno limitado pela quantidade de rifas, que reconhecerá os números não repetidos ao decrescer em uma unidade o valor de rifas N em função da quantidade de repetições. Esse número, que chamarei de M, está associado a um loop externo de variável j, que representará a casa do vetor, e esse vetor terá tamanho igual a M (o caso em que o identificador não cai no desvio condicional). Com isso saberei quais números foram repetidos, sendo que eles estarão armazenados num vetor. Por fim, caso haja um número de identificadores que compararam a mesma quantia de rifas, eu pegarei esse vetor da repetição e farei um loop comparando cada valor, para que o maior entre eles seja a saída. Isso é o que pensei, porém não consegui achar essa quantia M corretamente, pois o loop só reconhece o primeiro elemento repetido. Assim, o valor de M será igual N-1, apenas 1 vez.

Aí, gostaria de pedir uma ajuda com meu código para encontrar esse erro, otimizar minha ideia e corrigir pensamento.

Segue meu código abaixo.

 

OBS.: não ligue para as variáveis que não estão presentes no corpo do código, pois a parte que fiquei em dúvida de como fazer é a parte de reconhecer as repetições, por isso só fiz parte do código.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Pedro Moreira de Souza  Olá tudo bem? As N entradas é sempre uma sequência ordenada ?

 

 

 

Enunciado (editado por @MB_)

10 horas atrás, Pedro Moreira de Souza disse:

Essa questão pede que ...

  1. Seja a primeira linha da entrada uma quantidade N de rifas; as quais fazem parte de um sorteio,
  2. E a segunda linha consistirá de N entradas (rifas) compradas pelos compradores; os quais serão identificados por números inteiros (chamarei esse número associado ao comprador de identificador) .
  3. O número de identificadores pode repetir. 
  4. O vencedor do sorteio será aquele que comprar a maior quantidade de rifas, porém, caso haja empate, o vencedor será aquele com o maior identificador.
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Pedro Moreira de Souza @Pedro Moreira de Souza     para encontrar o maior valor no vetor , você inicializa a variável maior com valor zero , e percorre todo o vetor começando de zero e se algum número for maior que o valor da variável maior então faça maior igual a esse valor ,  e seu código poderia ser assim  :

#include <iostream>
#include <conio.h>

using namespace std;

int main(){
    int N, i, j, k, tamanho, M, maior=0, Rep, Aux=0;/* inicializando as variáveiss */
    cin>>N;
    int Rifa[N];
    for(i=0;i<N;i++){
        cin>>Rifa[i];
    }
    M=N;/* não tem necessidade */
    int Rept[N];/* pode se N mesmo */
    for(j=0;j<N;j++) {/* pode se N mesmo */
        Rept[j]=0;
    }
    for(j=0;j<N;j++) {/* pode se N mesmo */
        inicio:
        for(i=0;i<N;i++){
            if(Rifa[j]==Rifa[i] && j != i){/* compara todos com todos */
                /* M=N-1;
                goto inicio;/* loop infinito */
                Rept[j]=Rifa[j];
            }
            /*Aux=Rifa[i];/* não tem necessidade */
            /*Rept[j]=Aux;/* não tem necessidade */
        }
    }
    for(j=0;j<N;j++)/* pegar o maior repetido */
        if(Rept[j]>maior)
            maior=Rept[j];

    tamanho=N;
    if( maior )
        cout<<"O Maior Dos Repetido eh -> "<<maior<<endl;
    else
        cout<<"Nao Houve Nenhum Repetido !"       <<endl;
    cout<<"Tamanho -----------------> "<<tamanho  <<endl;
    cout<<"\n\n    Tecle !"                       <<endl;
    getch();
    return 0;
}

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

@devair1010

#include <iostream>

using namespace std;

int main () {

int N, M, i, j, Rep, maior=0, aux=0, maior2=0;
cin>>N;
int Rifa[N];
for(i=0;i<N;i++) {
      cin>>Rifa[i];
}

int Rept[N];
 for(j=0;j<N;j++) {
   Rept[j]=0; 
 }
for(j=0;j<N;j++) {
  Rep=1;
  for(i=0;i<N;i++) {
    if(Rifa[j]==Rifa[i] && j!=i) {
      Rep++;
    }
       Rept[j]=Rep;
  }
}

for(j=0;j<N;j++) {
  if(Rept[j]>maior) {
    maior=Rept[j];
    aux=Rifa[j];
  }
  else if() {
    
    }
}

cout<<aux<<endl;

}

Consegui fazer o código, mas estou há 5h preso nesse cout que contabilizaria o empate. Não sei escrever. Já tentei de diversas formas mas sempre tem algum erro. Com apenas 1 if, ele me dá o número que mais se repete primeiro, mas quero que em casos em haja números iguais o maior seja o vencedor.

Pra quem quiser ver o enunciado da questão:

http://200.128.51.30/contest/statement/H

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...