Informatică, întrebare adresată de headache, 9 ani în urmă

cine poate sa imi dea rezolvarea completa la problema 4 subiectul III la simularea la informatica din 2016
cerinta este
4.Un număr x se numește sufix al unui număr y dacă y se poate obține din x prin alipirea,
la stânga sa, a cel puțin unei alte cifre.
Fişierul bac.in conţine un şir de cel mult  10^{9}
numere naturale din intervalul [0, 10 ^{9} ].
Numerele din şir sunt separate prin câte un spaţiu.
Se cere să se afișeze pe ecran, în ordine strict crescătoare, toate numerele din intervalul
[100,999] care sunt termeni ai șirului aflat în fișier și sunt sufixe pentru cel puțin un alt
termen al aceluiași șir. Numerele sunt afișate câte unul pe linie, iar dacă în șir nu există
astfel de numere, se afișează pe ecran mesajul Nu exista. Pentru determinarea
numerelor cerute se utilizează un algoritm eficient din punctul de vedere al timpului de
executare.
Exemplu: dacă fişierul bac.in are conţinutul
15502 49 54321 6149 76149 123 123 502 4321 321 321
atunci pe ecran se afişează numerele
321
502
a) Descrieţi în limbaj natural algoritmul utilizat, justificând eficienţa acestuia. (4p.)
b) Scrieţi programul C/C++ corespunzător algoritmului descris.

Răspunsuri la întrebare

Răspuns de blindseeker90
2
#include <iostream>
#include <fstream>
using namespace std;


int aparitii[900];

int main(){
int x,i,sw=0;
ifstream is("bac.in");
while(1){
is>>x;
//sfarsitul fisierului atins, oprim bucla
if(is.eof()) {
break;
}
//numarul este mai mic decat 100, nu ne intereseaza, reia bucla
if(x<100){
continue;
}
else if(x<1000){
if(aparitii[x-100]==0||aparitii[x-100]==2)
aparitii[x-100]+=1;
}
else{

while(x>100){
if(aparitii[x%1000-100]==0||aparitii[x%1000-100]==1)
aparitii[x%1000-100]+=2;
x=x/10;
}
   }   
}
for(i=0;i<900;i++){
if(aparitii[i]==3){
cout<<i+100<<endl;
sw=1;
}

}
if(sw==0){
cout<<"Nu exista";
}

return 0;
}
Alte întrebări interesante