.Fişierul text NUMERE.IN conţine cel mult 100000 numere naturale de cel mult nouă cifre fiecare, numerele fiind despărţite prin câte un spaţiu. Cel puţin unul dintre numere este palindrom.
a) Scrieţi programul C/C++ care citeşte numerele din fişierul NUMERE.IN şi, folosind apeluri utile ale subprogramului Palindrom, determină în mod eficient, din punct de vedere al memoriei utilizate şi al timpului de executare, care este cel mai mare număr palindrom citit şi de câte ori apare el în fişierul NUMERE.IN.
Programul scrie în fişierul text NUMERE.OUT numărul astfel determinat precum şi numărul de apariţii ale acestuia, pe rânduri diferite.
Exemplu: dacă NUMERE.IN conţine numerele:
23 565 78687 7887 7865 78687 7887 23 78687 98798
atunci NUMERE.OUT va conţine:
78687
3
b) Descrieţi succint, în limbaj natural, metoda de rezolvare folosită, explicând în ce constă eficienţa ei (3 – 4 rânduri).
Răspunsuri la întrebare
Răspuns de
3
Ca programul sa fie eficient cu atatea numere trebuie sa ai grija sa nu incarci in memorie elemente de care nu ai nevoie adica sa-ti iei doar informatiile necesare de pe Hard Disk si dupa flosire sa le eliberezi imediat.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fi("numere.in");
ofstream fo("numere.out");
bool Palindrom(unsigned long nr);
int main() {
unsigned long max = 0,temp,count=0;
//Start of search
while (!fi.eof()) {
fi >> temp;
if (Palindrom(temp)) {
if (temp > max) {
max = temp; count = 1;
}else if(temp==max) {
count++;
}
}
}
//End of search : 0.052 seconds for 10000 numbers in the range 1000-10000000
fo << max << endl<< count;
return 0;
}
bool Palindrom(unsigned long nr) {
unsigned long r_nr=0,temp=nr;
while (temp) {
r_nr *= 10;
r_nr += temp % 10;
temp /= 10;
}
return (r_nr == nr ? 1:0);
}
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream fi("numere.in");
ofstream fo("numere.out");
bool Palindrom(unsigned long nr);
int main() {
unsigned long max = 0,temp,count=0;
//Start of search
while (!fi.eof()) {
fi >> temp;
if (Palindrom(temp)) {
if (temp > max) {
max = temp; count = 1;
}else if(temp==max) {
count++;
}
}
}
//End of search : 0.052 seconds for 10000 numbers in the range 1000-10000000
fo << max << endl<< count;
return 0;
}
bool Palindrom(unsigned long nr) {
unsigned long r_nr=0,temp=nr;
while (temp) {
r_nr *= 10;
r_nr += temp % 10;
temp /= 10;
}
return (r_nr == nr ? 1:0);
}
andriesboss92:
mulțumesc.. dar cu ce ajuta biblioteca string?
Alte întrebări interesante
Matematică,
8 ani în urmă
Fizică,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Franceza,
9 ani în urmă
Limba română,
9 ani în urmă