Informatică, întrebare adresată de miramirabela87, 9 ani în urmă

Cerința
Se dau înălțimile a n copii, numerotați de la 1 la n, exprimate prin numere naturale. Afișați numerele de ordine ale copiilor în ordinea crescătoare a înălțimii lor.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații, reprezentând, în ordine, înălțimile copiilor.
Date de ieșire
Programul va afișa pe ecran n numere naturale distincte cuprinse între 1 și n, separate prin exact un spațiu, reprezentând numerele de ordine ale copiilor în ordinea crescătoare a înălțimii.
Restricții și precizări
1 ≤ n ≤ 1000
înălțimile copiilor vor fi numere naturale distincte din intervalul [1 , 10000]
Exemplu
Intrare
7
8 20 16 14 10 4 12
Ieșire
6 1 5 7 4 3 2
//in C++
//618

Răspunsuri la întrebare

Răspuns de chisebogdan
1
Folosesti o structura. Din greseala le-am ordonat descrescator de aceea ultimul for e mai ciudat dar este corect.

#include <iostream>
#include <fstream>
#include <cmath>
#include <cstring>
using namespace std;

struct elev
{   
unsigned h, nr;
};

void schimbare(unsigned &a, unsigned &b)
{   
unsigned aux=a; 
  a=b; 
   b=aux;
}

void inserare(elev v[], unsigned &n, unsigned a, unsigned j)
{   
 v[n+1].h=a; 
  int i=n+1;
    while(i>1 && v[i].h>v[i-1].h)   
 {        schimbare(v[i].h, v[i-1].h); 
      schimbare(v[i].nr, v[i-1].nr);   
     i--;   
}   
 v[i].nr=j;   
 n++;
}

int main()
{    ifstream f("fisier.txt"); 
  elev v[1000]; 
  unsigned n, i, t=1, a; 
   f >> n; 
  for(i=1; i<=n; i++)   
    v[i].nr=0;   
 for(i=1; i<=n; i++)   
{        f >> a;     
  inserare(v, t, a, i); 
  }
    for(i=t-1; i>0; i--)   
     cout << v[i].nr << " "; 
  return 0;
}
Alte întrebări interesante