Jump to content
Felipp

[Dúvida] Ordenação de Vetores

Recommended Posts

Boa noite pessoal,

 

Tenho umas listas de ordenação em C++ para fazer, e em alguns exercícios eu fiquei com uma dúvida imensa.

O problema é o seguinte:

Tenho que ordenar o vetor em ordem decrescente (até ai tudo bem), mas após isso tenho que imprimir o índice do vetor original. Ou seja, tenho que ordenar e, após isso, imprimir a posição que esse número ocupava ANTES de ser ordenado, e não o valor da posição.

 

EXEMPLO:

v[5] = {1, 3, 4, 6, 2}

Vetor ordenado = {6, 4, 3, 2, 1}

Porém, a saída esperada é:

{3, 2, 1, 4, 0}, que são os índices do vetor original.

 

 

Pesquisando pela internet, vi algumas resoluções que usavam struct, mas não posso usar nada do tipo. Apenas vetores e algoritmos de ordenação.

Alguém pode me dar uma luz?

Grato!

Share this post


Link to post
Share on other sites
1 hora atrás, _Isis_ disse:

Ordena a cópia do vetor e busca no original.

Obrigado!

Mas ainda tô me batendo na parte da busca :(

Entro sempre em loop infinito quando busco os elementos do vetor ordenado no vetor original.

Esse problema é o Olimpiadas, do SPOJ (http://br.spoj.com/problems/OLIMPJ09/)

#include<iostream>
using namespace std;
int main(){
	int n, m, o, p, b, maior, aux, medalha[100], pos[100], a;
	cin >> n >> m;
	for (int i=0; i <100; i++){
		medalha[i] = 0;
		pos[i] = 0;
	}
	for (int i = 0; i < m; i++){
			cin >> o >> p >> b;
			medalha[o]++;
			medalha[p]++;
			medalha[b]++;
			pos[o]++;
			pos[p]++;
			pos[b]++;
	}
	 for (int i = 0; i < n; i++){
		maior = i;
		for (int j=i; j<n; j++){
			if (medalha[j] > medalha[maior])
				maior = j;
		}
	aux = medalha[i];
	medalha[i] = medalha[maior];
	medalha[maior] = aux;
}
	for (int i = 0; i <n; i++)
		cout << medalha[i] << " ";
	cout << endl;
	for (int i = 0; i <n; i++){
			a = medalha[i];
			for (int j =0; j < n; j++){
			if (pos[j] = a){
				cout << j << " ";
				j = 0;
		}
	}
}
}

 

Share this post


Link to post
Share on other sites

Implemente o método da bolha, ele é bem simples e eficiente em vetores pequenos.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Thalysson Torres
      Estou com problema nesse código, na verdade é uma duvida de como trabalhar melhor com string. Eu quero faze um programa e nele quero receber do usuario, o sexo, caso o usuario digite um nome no local do sexo e seja diferente de Masculino, Feminino... de mensagem de erro. 
       
       
      #include <stdio.h>
      #include <stdlib.h>
      #include <math.h>

      int main()
      {
          char nome [25], sexo;

          
          
      printf("Digite o nome \n");
      scanf("%[\n]", &nome);
      printf("Digite o Sexo:\n Para feminino digite: F \n\n Para masculino digite; M \n");
      scanf("%c",&sexo);
      if (sexo != 'f'|| 'F' || 'M' || 'm')
          printf("Sexo Invalido");
       
       
      ...
       


          
          return 0;
      }
       
    • By joaov369
      Então, preciso fazer um programa em c++ que duplique o valor do vetor se ele for um numero par, até ai tudo bem, e preciso trocar a ordem desse vetor ate a penultima posição, desde a primeira, isso que tá garrando aqui, se alguem puder dar uma olhada no meu codigo.
      #include <iostream> using namespace std; #define n 10 int main() { int a[n], temp; for (int i = 0; i<n; i++) { cin >> a[i]; } for (int i = 0; i<n; i++) { if (a[i] % 2 ==0) a[i]=a[i]*2; } for (int i = 0; i<n-1; i++) { temp=a[i]; a[i]=a[i+1]; temp=a[i]; a[i]=temp; } for (int i = 0; i<n; i++) { cout << a[i] << " " ; } return 0; }  
    • By BrunoPro
      Boas galera.
       
      Estou em formação de iniciação a C++ de 50h, e completei 35h até agora, meu professor passou 50 exercícios para fim de semana, e estou com problema em 2 deles.
       
      Este nem entendi : O resultado da divisão inteira de um número inteiro por outro número inteiro pode sempre ser obtido utilizando-se apenas o operador de subtração. Assim, se quisermos calcular (7/2),
      basta subtrair o dividendo (2) ao divisor (7), sucessivamente, até que o resultado seja menor do que o dividendo. O número de subtrações realizadas corresponde ao quociente inteiro, conforme o exemplo seguinte:
      7 - 2 = 5
      5 - 2 = 3
      3 - 2 = 1
      Descreva um programa para o cálculo da divisão de um inteiro pelo outro. Note que se o dividendo for zero, esta é uma operação matematicamente indefinida.
       
       
      E o segundo exercicio é o seguinte  escrever de 0 a 99 por extenso o numero, alguém me dá uma ajuda?
      #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <iostream> #include <locale> using namespace std; int main() { setlocale(LC_ALL, "Portuguese"); system ("color 1B"); int n,a,b,c; cout << "Insira um número de 0 a 99 e o retorno seja o número por extenso\n"; cout << "Insira o número : "; cin >> n; { switch (a) { case 0 : cout << "zero"; break; case 1 : cout <<"um"; break; case 2 : cout <<"dois"; break; case 3 : cout <<"tres"; break; case 4 : cout <<"quatro"; break; case 5 : cout <<"cinco"; break; case 6 : cout <<"seis"; break; case 7 : cout <<"sete"; break; case 8 : cout <<"oito"; break; case 9 : cout <<"nove"; break; } switch (b) { case 0 : cout <<"dez"; break; case 1 : cout <<"onze"; break; case 2 : cout <<"doze"; break; case 3 : cout <<"treze"; break; case 4 : cout <<"catorze"; break; case 5 : cout <<"quinze"; break; case 6 : cout <<"dezesseis"; break; case 7 : cout <<"dezassete"; break; case 8 : cout <<"dezoito"; break; case 9 : cout <<"dezanove"; break; } switch (c) { case 2 : cout <<"vinte"; break; case 3 : cout <<"trinta"; break; case 4 : cout <<"quarenta"; break; case 5 : cout <<"cinquenta"; break; case 6 : cout <<"sessenta"; break; case 7 : cout <<"setenta"; break; case 8 : cout <<"oitenta"; break; case 9 : cout <<"noventa"; break; } } { if (n >=20 && n<100) cout << c << a; } { if ( n>10 && n<20) cout <<b; } { if (n<=10) cout <<a << c; } return 0; }  
    • By picsartisticc
      Meu professor passou uma prova pra casa para entregar na sexta feira e eu ainda não tive tempo de fazer nada e ainda tenho mais outra prova no mesmo dia. E definitivamente icc não tá como prioridade.
      Alguém pode pelo amooor me ajudar? 
      porque assim, máximo respeito pelos programadores viu? É muita paciência que vocês tem!
      1. Ele pede pra implementar um programa que tenha funções de soma, subtração, multiplicação e divisão que opere 2 números e retorne a sua respectiva operação.
      2. Implementar uma função que receba a quantidade de faltas no trabalho e retorne o salario mensal de um funcionario, cuja diaria é 100,00 de acordo com o numero de dias trabalhados.
      Tem essa formula aqui:
      dias_trabalhados=30-falta_no_mes
      salario_mensal=dias_trabalhadosx100
      3. Implantar um procedimento que receba 3 números e exiba-os em ordem crescente.

      Desde já muita gratidão por todos que tirarem um tempinho do tempo pra me salvar. Att.
    • By Luis011
      Estou tentando fazer um programa para cadastro de clientes, para o aprendizado apenas, estou com um erro que nao consigo resolver, cadastro algumas pessoas mas na hora de fazer a pesquisa desses cadastros eu coloco o cpf de uma e aparece as informacoes da proxima pessoa na fila de arrays. E quando tento pesquisar alguma pessoa que nao esteja no array 0 cai no else CPF INVALIDO, 
      Ai vai o codigo: 
      #include <iostream>
      #include <cstdio>
      #include <cstdlib>
      #include <cstring>
      char nome[50] [50];
       char email[50] [50];
       int cpf[50];
       int op;
       int i = 0;
       int a;
      int cpfpesquisa;
      char emailpesquisa[50];
      using namespace std;
      void pesquisa ();
      void cadastro();
      int main()
      {
          do{
          cadastro();
          pesquisa();
          }while(op == 2);
      system ("PAUSE");
      return 0;
      }
      void cadastro() {
       do{cout << "-----CADASTRO-----" << endl << endl;
       cout << "NOME: " ;
       cin >> nome;
       cout << endl <<"EMAIL: ";
       cin >> email;
       cout << endl << "CPF: ";
       cin >> cpf;
       cout << endl << "PARA CONTINUAR CADASTRANDO DIGITE 1";
       cin >> op;
       i++;
       }while(op == 1);
      }
      void pesquisa () {
      do{
      cout << "DIGITE 1 PARA PESQUISAR POR CPF E 2 PRA PESQUISAR POR EMAIL ";
      cin >> op;
      switch(op)
      {
          case 1: cout << "DIGITE O CPF: ";
                  cin >> cpfpesquisa;
                  for(a=0;a<50;a++) {
                      if(cpfpesquisa == cpf[a])
                      {cout << "NOME: " << nome[a] << endl << "EMAIL: " << email[a] << endl;
                  break;}
                  else{
                      cout << "CPF INVALIDO!"; }break;}break;

          case 2: cout << "DIGITE O EMAIL: ";
                  cin >> emailpesquisa;
                  for(a=0;a<50;a++){
                          if (strcmp( emailpesquisa,email[a]))
                          {
                              cout << "NOME: " << nome[a] << endl << "CPF: " << cpf[a] << endl;
                          break;}
                  }

      }
      cout << endl << "PARA CONTINUAR A PESQUISAR DIGITE 1" << endl << "PARA VOLTAR A CADASTRAR DIGITE 2 ";
      cin >> op;
      }while (op ==1);
      }
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.