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

a) Fişierul date.in conţine un şir de cel mult 10000 numere naturale (printre care cel puţin un număr par şi cel puţin un număr impar), cu cel mult două cifre fiecare, separate prin câte un spaţiu. Scrieţi un program C/C++ care citeşte numerele din fişierul date.in şi scrie în fişierul text date.out valorile distincte citite, separate prin câte un spaţiu, respectându-se regula: pe prima linie vor fi scrise numerele impare în ordine crescătoare, iar pe linia a doua numerele pare, în ordine descrescătoare. Alegeţi o metodă eficientă din punctul de vedere al timpului de executare. Exemplu: dacă pe prima linie a fişierului date.in se află numerele: 75 12 3 3 18 75 1 3 atunci fişierul date.out va conţine: 1 3 75
18 12

eu am scris asta, dar nu merge:
#include
#include
using namespace std;
int main()
{
int x,fr[10000]={0};
ifstream f("date.in");
ofstream g("date.out");
for(int i=0;i<=9999;i++)
{f>>x;
fr[x]++;
}
for(int i=1;i<=9999;i++)
{
if(i%2==0)i++;
if(fr[i]!=0) g<<" ";
}
for(int i=9998;i<=0;i--)
{
if(i%2!=0)i--;
if(fr[i]!=0) g<<" ";
}
f.close();
g.close();
return 0;
}


Paddon: N-ai nevoie de unde vector de 10000. E suficient un vector de aparitii de 100, din moment ce nu te intereseaza numerele dupa ce le-ai citit. Ti-l scriu sau te descurci?
ElenaGr: Ok.merci!

Răspunsuri la întrebare

Răspuns de Paddon
3

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

   int numar, numere[100] = {0};

   ifstream file_in("date.in");

   ofstream file_out("date.out");

   while(file_in >> numar)

   {

       numere[numar] = 1;

   }

   for(int i = 1; i <= 99; i += 2)

       if(numere[i])

           file_out << i << " ";

   file_out << endl;

   for(int i = 98; i >= 0; i -= 2)

       if(numere[i])

           file_out << i << " ";

   file_out << endl;

   file_in.close();

   file_out.close();

   return 0;

}


cristicristi30: #include
#include
using namespace std;
int x,fr[100];
int main()
{

ifstream f("date.in");
ofstream g("date.out");
while(f>>x)
fr[x]++;
for(int i=1;i<=99;i=i+2)
{
if(fr[i]!=0) g<}
g<for(int i=98;i>=0;i=i-2)
{
if(fr[i]!=0) g<}
f.close();
g.close();
return 0;
}
Alte întrebări interesante