Jump to content

POWERED BY:

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
Em 29/03/2017 at 00:16, Felipp disse:

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.

 

Felipp, o que  diz está errado pois a saída nesse caso deve ser {1,3,4,6,2} já que são os valores do vetor antes de ele ser ordenado. Lendo o seu enunciado vejo que o que você quer fazer é ordenar os valores em um vetor mas somente após isso mostrar esse vetor com os seus valores antes dessa ordenação. Sendo assim dá para fazer exatamente como a _Isis_ e o r.vinícius dizem e aplicar um algoritmo de ordenação nesse vetor após fazer uma cópia dele para poder mostrar na tela os valores em sua ordem original antes dessa ordenação. Aqui vai o código para isso: 

#include<iostream.h>

int main(){
  int v[5]={1,3,4,6,2};
  int vcopia[5],aux;
  for(int i=0; i<5; i++)
    vcopia[i]=v[i];  
  for(int i=0; i<4; i++)
    for(int j=i+1; j<5; j++)
      if(v[i]<v[j]){
        aux=v[i];
        v[i]=v[j];
        v[j]=aux;
      }
  for(int i=0; i<5; i++)
    cout << vcopia[i] << " ";  
  system("pause");
}

 

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 josenilson
      Olá pessoal !
       
      Estou tentando rodar um projeto de um jogo na minha maquina porem o mesmo pede para adicionar o log4cxx 0.10.0, realizei pesquisas na internet a respeito mas até agora nada, Encontre para baixar nesse site https://logging.apache.org/log4cxx/1.0.0/download.html porem não sei se devo instalar ele no windows porque ao exportar ele no projeto as depêndencias que precisam dele ficam informando o erro log4cxx.logger.h no such file or directory. a linguagem que estou usando e C++
       
       
    • By Sharank
      Strcat Function In C++
       
      I'm new to C and C++ programming, can anyone give me a hint on what I'm doing wrong here. I'm trying to write to concat function that takes to pointers to chars and concatenates the second to the first. The code does do that, but the problem is that it adds a bunch of junk at the end.
       
      For instance, when passing the arguments - "green" and "blue", the output will be "greenblue" plus a bunch of random characters. I also wrote the strlen function that strcat uses, which I will provide below it for reference. I'm using the online compiler at InterviewBit The exact instructions and specification is this:
       
      int main(int argc, char** argv)
      {
      const int MAX = 100;
       
      char s1[MAX];
      char s2[MAX];
       
      cout << "Enter your first string up to 99 characters. ";
      cin.getline(s1, sizeof(s1));
      int size_s1 = strlen(s1);
      cout << "Length of first string is " << size_s1 << "\n";
       
      cout << "Enter your second string up to 99 characters. ";
      cin.getline(s2, sizeof(s2));
      int size_s2 = strlen(s2);
      cout << "Length of second string is " << size_s2 << "\n";
      cout << " Now the first string will be concatenated with the second
      string ";
      char* a = strcat(s1,s2);
       
      for(int i = 0; i<MAX; i++)
      cout <<a;
       
      // system("pause");
      return 0;
      }
       
      //strcat function to contatenate two strings
      char* strcat(char *__s1, const char *__s2)
      {
      int indexOfs1 = strlen(__s1);
      int s2L = strlen(__s2);
      cout <<s2L << "\n";
      int indexOfs2 = 0;
      do{
      __s1[indexOfs1] = __s2[indexOfs2];
      indexOfs1++;
      indexOfs2++;
      }while(indexOfs2 < s2L);
       
       
      return __s1;
      }
       
      //Returns length of char array
      size_t strlen(const char *__s)
      {
      int count = 0;
      int i;
      for (i = 0; __s != '\0'; i++)
      count++;
      return (count) / sizeof(__s[0]);
       
      }
    • By roberson abalaid
      #include <stdio.h>
      #include <stdlib.h>
      int arr[3][5];
      int main(){
          
          printf("Favor inserir os dados...\n");
          
          for(int i = 0; i < 3; i++){
              for(int j = 0; j < 5; j++){
                  scanf("%d", &arr[j]);
              }
          }
          
            printf("os valores inseridos foram...\n");
          
          for(int i = 0; i < 3; i++){
              for(int j = 0; j < 5; j++){
                  printf("  %d  ", arr[j]);
              }
              printf("\n");
          }
          return 0;
      }
    • By flipmartinz13
      Alguém pode me ajudar nessa questão de C++? não estou conseguindo construir o algorítmo corretamente.

      5.92)    Faça um algoritmo que leia a matrícula, nome, sexo e três notas dos alunos de uma escola e obtenha os seguintes resultados:
      a) A matrícula da aluna que obteve a maior média.
      b) A matrícula do aluno que obteve a menor média.
      c) O percentual de mulheres na turma.
      d) Quantos alunos foram aprovados, independente do sexo.
      e) O percentual de alunas aprovadas.
      Obs.: o flag é uma matrícula igual a 0 (zero).
    • By flipmartinz13
      Estou tentando fazer esse exercício de introdução a programação em C++, e estou tendo dificuldades para criar os algoritmos. Alguém poderia me ajudar?


      Uma agência de turismo quer fazer um levantamento das praias da cidade para um programação turística de verão, sabendo-se que cada praia tem um nome e uma distância (em Km) do hotel. Criar um algoritmo que forneça os seguintes dados:
      18

       Porcentagem de turistas nas praias próprias do hotel
       A praia mais adiante
       Nome e distancia das praias não-próprias com distancia do hotel maior que 10 km.
      O algoritmo acaba quando se digita @ para nome da praia.
×

Important Information

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