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

Scrieți un program C++ care citește de la tastatură numere naturale din intervalul [1,10000000000], în acestă ordine n, apoi cele n elemente ale unui tablou unidimensional. Numărul n aparține intervalului [1,100000000000], Programul modifică ordinea valorilor din tablou, astfel încât valorile impare să fie ordonate descrescător, valorile pare să fie ordonate crescător, şi fiecare număr de tip par/impar îşi va păstra indicii originali. Exemplu: n=8, şi vectorul: 2, 0, 1, 9, 2, 0, 2, 0 Vom afișa: 0 0 9 10 222, Se observă ca numerele impare si-au păstrat indicii originali, la fel si cele pare.​


misterL: presupun ca nu lucrati cu alocare dinamica?

Răspunsuri la întrebare

Răspuns de misterL
0

Răspuns:

#include<fstream>

std::ifstream f ("date.in");

std::ofstream g ("date.out");

int fr[10],i,j;

long long n,a[10000001];

int main()

{

   f>>n;

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

   {

       f>>a[i];

       fr[a[i]]++;

   }

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

       if(a[i]%2==0)

       for(j=0;j<=8;j+=2)

       if(fr[j])

   {

       a[i]=j;

       fr[j]--;

       break;

   }

   else;

   else

      for(j=9;j>=1;j-=2)

       if(fr[j])

   {

       a[i]=j;

       fr[j]--;

       break;

   }

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

       g<<a[i]<<" ";

}

Explicație:

Presupun ca v-a dat o valoare asa mare pentru n, sa va oblige sa folositi vector de frecventa. Pentru a eficentiza si mai mult se poate folosi alocare dinamica.

Alte întrebări interesante