Ir ao conteúdo

Posts recomendados

Postado

Estou tentando fazer um código para contar quantos valores em sequência um array com n posições possui. Exemplo: Entrada- n=11 v[11]={30, 30, 30, 30, 40, 40, 40, 40, 40, 30, 30}; Saída- 5(5 40's consecutivos).

Aqui está o que eu fiz até agora mas não está funcionando corretamente:

#include<iostream>

using namespace std;

int main(){
    int n;
    cin>>n;
    int v[n];
    for(int i=0; i<n; i++){
        cin>>v[n];
    }
    int cont=0, p=0;
    for(int i=0; i<n ; i++){
        for(int j=i+1; j<n; j++){
            if(v[i]==v[j]){
                ++cont;
            }
            else if(v[i]!=v[j]){
                if(cont>p){
                    p=cont;
                    cont=0;
                }
                else if(cont<p){
                    cont=0;
                }
            }
            else if(i==n-1){
                if(cont>p){
                    p=cont;
                    cont=0;
                }
            }
        }
    }
    cout<<p<<"\n";
    return 0;
}

 

Postado

Tentei aperfeiçoar e tornar mais clean code, o ultimo que enviei, apenas contava quantos tinha, porém eu arrumei, so que tem um problema, se você quer contar quantos elementos possuem consecutivamente, você precisa determinar a lógica, pois pode existir varios conjuntos do mesmo numero, só que separados, sendo que precisará determinar se esses conjuntos separados serão contados.

Exemplo em : 30 30 40 40 50 22 40 40 40;

Temos 2 conjuntos de elementos 40, 

2 elementos com 40 depois do 30

3 elementos com 40, depois do 22

etc...

:

#include <stdio.h>
#include <winsock2.h>//system

//Retorna contagem de elementos
//@n = elemento a ser encontrado
//@array = array com os valores
//@maxArray = tamanho maximo do array
int contagem(int n, int *array, int maxArray){
	int count = 0;
		for(int i = 0; i < maxArray; i++){
			if(array[i] == n){
				count++;
			}else if(count == 1){
				count = 0;
			}else break;
		}
	return count;
}

int main(){
	//ENTRADA - Pode preencher com cin
	int array[7] = {30,30,20,30,40,40,30};
	
	//SAIDA
	printf("20: %d elementos consecutivos.\n",contagem(20, array, 7));
	printf("30: %d elementos consecutivos.\n",contagem(30, array, 7));
	printf("40: %d elementos consecutivos.\n",contagem(40, array, 7));
	
	system("pause");
}

 

Postado

@1freakday Eu quero apenas contar os elementos consecutivos do mesmo conjuto e retornar o número de elementos consecutivos do mesmo conjunto:

1 hora atrás, 1freakday disse:

Exemplo em : 30 30 40 40 50 22 40 40 40;

Temos 2 conjuntos de elementos 40, 

2 elementos com 40 depois do 30

3 elementos com 40, depois do 22

Neste caso ele retornaria 3 pelos 3 40's depois do 22;

  • Curtir 1
Postado

       Eu aprendo mais e mais com as questões que os colegas trazem aqui para fórum, por isso       gosto

tanto de vir aqui, praticamente ação diária em minha vida. Fazia tempo que queria dizer isso!        Thank!!!     

 

       A tarefa  é,  determinar  o  maior número  de  repetições  consecutivas,  em  um vetor previu e

organizado, melhor dizendo, ordenado.

 

       Dividir para conquistar: Funções, na minha concepção funções além de simplificar a solução, produz

um código mais elegante (bonito de se ver). É uma prática logicamente e estaticamente mais  organizada

que jogar tudo dentro do main, da ultima forma fica desorganizado e difícil de depurar, por razão disso,não

recomendo. Por mais simples que seja ou complexa a tarefa, jogar tudo no main é FAIL.

 

       Dito isso, vamos ao exercício:

       A Função faz- Busca por um Elemento e Conta suas  ocorrências  no  reta vetorial

       A Função retorna- O elemento ou índice do elemento campeão bem como imprime

                o número de ocorrências.

       É preciso- vetor, tamanho do vetor, índice de elementos bem como campeão.

 

CODE

/**
 * \author     Mauro Britivaldo
 * \date       21-Dez-2016
 * Linguagem:  C'11
 * Editor:     Code::Blocks 16.01 GNU GCC Compiler
 *
 * breve descrição.
 *
 */

//##################### Referências Bibliográficas ###########################//
#include <iostream>


//#####################    Protótipos de Função    ###########################//
int elem_count( const unsigned int scale, unsigned int strip[] );


using namespace std;

int main( void )
{
    unsigned int v[11]={30, 30, 30, 30, 40, 40, 40, 40, 40, 30, 30};

    elem_count( 11,v );
    return 0;
}


//#####################    Declaração de Função     ##########################//
int elem_count( const unsigned int scale, unsigned int strip[] )
{
    unsigned int index, maior =  0, tmp_maior =  0, busca =  0, campeao = 0;

    for( index =  0; index < scale; )
    {
        busca =  strip[ index ];
        for( ;index < scale && busca == strip[ index ]; index++ )
        {
            tmp_maior++;
        }
        
        if( maior < tmp_maior ){
             campeao = index - 1, 
             maior =  tmp_maior;
        }
           

        tmp_maior = 0;
    }

    cout << "Saida- " << maior << "(" << maior << " ";
    cout << strip[campeao] << "'s consecutivos)" << endl;

    return 0;
}

 

Fácil de ler acima >.<

  • Curtir 1
Visitante
Este tópico está impedido de receber novas respostas.

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!