Informatică, întrebare adresată de sikesjack1, 8 ani în urmă

Buna!
Nu inteleg ce imi cere in problema asta, ma poate ajuta cineva??
Se dă un vector cu n elemente numere întregi.

Cerinţa
Să se ordoneze crescător elementele unui vector crescător după prima cifră.

Date de intrare
Fişierul de intrare sortcif2.in conţine pe prima linie numărul n si pe a doua linie n numere întregi separate prin spaţii.

Date de ieşire
Fişierul de ieşire sortcif2.out va conţine pe prima linie cele n elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.

Restricţii şi precizări
0 < n ≤ 100
valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât 2 30

Exemplu
sortcif2.in

6
89 2246 91 4005 51 721
sortcif2.out

2246 4005 51 721 89 91


boiustef: se aranjează numerele nu după valoare ci după prima lor cifră. Vezi în sortcif2.out la prima cifă la fiecare număr sunt 2 4 5 7 8 9

Răspunsuri la întrebare

Răspuns de magdalenapop
2

#include<fstream>

using namespace std;

int n , k;

int i , j ;

int aux , ok;

int x[1001] , y [1001];

ifstream fin("sortcif2.in");

ofstream fout("sortcif2.out");

int main()

{

   fin >> n ;

   for(i = 1 ; i <= n ; i ++)

   {

       fin >> x[i];

       k = x[i];

       while(k > 9)

           k /= 10;

       y[i] = k;

   }

   do

   {

       ok = 1;

       for(i = 1 ; i < n ; i ++)

           if(y[i] > y[i+1])

           {

               aux = y[i];

               y[i] = y[i+1];

               y[i+1] = aux ;

               ok = 0;

               aux = x[i];

               x[i] = x[i+1];

               x[i+1] = aux ;

               ok = 0;

           }

   }

   while(ok == 0);

   for(i = 1 ; i <=n ; i++)

       fout << x[i] << " ";

}


boiustef: Magdalenapop, ai testat codul pe pbinfo? Nu ai ţinut cont de faptul că numerele pot fi şi negative...
Răspuns de boiustef
2

#include <iostream>

#include <fstream>

using namespace std;

ifstream f("sortcif2.in");

ofstream g("sortcif2.out");

int n, v[101], num, i, j;

short c[101];

int main()

{

   f >> n;

   for (i=0; i<n; ++i)

   {

       f >> v[i];

       num=v[i];

       if (num<0) num=-num;

       while (num>9) num=num/10;

       c[i]=num;

   }

   for (i=0; i<n-1; ++i)

   {

       for (j=i+1; j<n; ++j)

       {

           if (c[j]<c[i])

           {

               swap(v[i],v[j]);

               swap(c[i],c[j]);

           }

       }

   }

   for (i=0; i<n; ++i)

       g << v[i] << " ";

}


sikesjack1: Fix asa l am scris si eu, dar de ce trebuie sa fac swap si in vectorul cu prima cifra, nu doar in vecotrul principal???
boiustef: ordonezi vectorul cu prima cifră, doar asta se cere şi paralel evident aranjezi corespunzător şi vectorul principal
boiustef: cum poti ordona numai vectorul principal? tr să scoţi în evidenţă prima cifră
Alte întrebări interesante