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
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
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Geografie,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă