Está en la página 1de 16

Probleme atestat

1. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care pentru o cifra k citita de la tastatura, afiseaza pe ecran cate numere prime in scrierea carora apare cifra k, se gasesc in sirul dat. Exemplu: pentru n=4 , cifra k=2 si valorile citite 23, 603, 122, 27 se obtine numarul nr = 1, care corespunde valorii 23 . #include <iostream> #include <math.h> using namespace std; int prim(long int x){ if(x<=1) return 0; for(long d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1; } int test(long x,int k){ while(x>0){ if(k==x%10) return 1; x/=10;//x=x/10; } return 0; } int main() { long x; int k,nr,n,i; cin>>k>>n; nr=0; for(i=1;i<=n;i++){ cin>>x; if(prim(x) && test(x,k)) nr++; } cout<<nr; return 0; }

2. Se citeste de la tastatura un numar natural n cu cel mult noua cifre. Scrieti un program care verifica daca exista un numar natural k cu proprietatea ca n=1*2*3**k. Daca exista un astfel de numar, programul va afisa mesajul Da si valoarea k , altfel va afisa mesajul Nu.(intensiv: valoarea se determina utilizand o metoda eficienta din punct de vedere al timpului de executie) #include <iostream> using namespace std; int main() { long n,f=1; cin>>n; int k=0; do { k++; f*=k; }while(f<n); if(f==n) cout<<"Da "<<k; else cout<<"Nu"; return 0; }

3. In fisierul valori.txt se gasesc pe prima linie maximum 1000 de numere intregi despartite printr-un spatiu. Scrieti un program care sa determine valoarea maxima si valoarea minima, impreuna cu numarul de aparitii al maximului, respectiv al minimului.(intensiv: folositi o metoda eficienta din punct de vedere al memoriei si al numarului de operatii efectuate si afisati pe ecran valorile obtinute). Exemplu:continutul fisierului valori.txt este : 24 3 89 24 1 3 1 1 89, atunci se vor afisa rezultatele: min = 1 nr_aparitii = 3 max = 89 nr_aparitii = 2 #include <iostream> #include <fstream> using namespace std; int main() { ifstream f("valori.txt");

//fstream f("valori.txt",ios::in); int x,max,min,fmax,fmin; f>>x; max=min=x; fmax=fmin=1; while(f>>x) { if(x<min) { min=x; fmin=1; } else if(min==x) fmin++; if(x>max) { max=x; fmax=1; } else if(max==x) fmax++; } f.close(); cout<<"min = "<<min<<" nr_aparitii = "<<fmin<<endl; cout<<"max = "<<max<<" nr_aparitii = "<<fmax; return 0; }

4.Fisierul unu.in contine pe primul rand valoarea n ( 2=n=1.000.000 ), iar pe a doua linie se gasesc n numere intregi formate din cel mult 9 cifre si despartite prin spatiu. Stiind ca fisierul contine cel putin doua numere distincte printre cele n de pe a doua linie, scrieti un program care sa scrie in fisierul unu.out pe o singura linie si separate printr-un spatiu, in ordine descrescatoate, cele mai mari doua valori distincte din fisierul de intrare. (intensiv :alegeti o metoda eficienta de rezolvare atat ca timp de executare, cat si ca gestionare a memoriei) Exemplu : unu.in unu.out 10 -8 14 8 14 15 9 -7 1 4 10 15 14 #include <iostream> #include <fstream>

using namespace std; int main() { long n,x,maxM,maxm; ifstream f("unu.in"); f>>n>>x; maxM=maxm=x; while(n>1) { f>>x; if(x>maxM) {maxm=maxM; maxM=x;} else//x<=maxM if(maxm<x && x<maxM) maxm=x; n--; } f.close(); ofstream g("unu.out"); g<<maxM<<' '<<maxm; g.close(); return 0; }

5. Fisierul text numere.in contine pe prima linie un numar natural n (0=n=5000), iar pe a doua linie n numere naturale de cel mult 9 cifre fiecare, separate prin cate un spatiu. Sa se scrie un program care citeste n, apoi cele n numere naturale din fisierul numere.in si scrie in fisierul numere.out, pe cate o linie fiecare, numerele de pe a doua linie a fisierului numere.out care sunt palindroame cu exact patru cifre (un numar este palindrom daca este egal cu oglinditul sau). De exemplu daca fisierul numere.in are urmatorul continut : 5 1441 5 14 2552 78 atunci fisierul numere.out va contine : 1441 2552 #include <iostream> #include <fstream> using namespace std; int main() { int n,i;

long nr; ifstream f("numere.in"); ofstream g("numere.out"); f>>n; for(i=1;i<=n;i++){ f>>nr; if(1000<=nr&&nr<=9999&&nr%10==nr/1000&&nr/10%10==nr/100%10) g<<nr<<endl; } f.close(); g.close(); }

6.Se citeste de la tastaturp n, si apoi n perechi de cate doua numere intregi a si b cu ( a < 0 < b) reprezentand capetele intervalului[a, b]. Afisati pe ecran , daca exista, capetele intervalului de intersecsie al celor n intervale citite. in cazul in care nu exista intervalul de intersecsie se afiseaza 0. De exemplu, pentru n=3 si perechile [-1,20], [-4,9], [-7, 12] , obtinem solutia x= 1 si y= 9. #include <iostream> using namespace std; int main() { int n, a, b, amax , bmin; //amax este maximul de valori negative a iar bmin este minimul de valori pozitive b cin>>n; cin>>amax>>bmin; //valorile maxime/minime sunt intializate cu valori din sir for(int i=1;i<=n-1;i++){ cin>>a>>b; if(a>amax) amax=a; if(b<bmin) bmin=b; } cout<<amax<<" "<<bmin; }

7. Se citesc de la tastatura n numere naturale, cu cel mult 9 cifre fiecare. Scrieti un program care afiseaza cifra care apare de cele mai multe ori in numerele citite. Daca exista mai multe astfel de cifre se vor afisa toate.

Exemplu:Pentru n=4 si valorile 23, 431, 154, 452 se afiseaza 3 pentru ca cifra 4 apare de 3 ori in numerele citite. #include <iostream> using namespace std; int v[10]; int main() { int n, i; long val; cin>>n; for (i=1;i<=n;i++) { cin >>val; while (val>0) { v[val%10]++; val/=10; } } int max=v[0]; for (i=1;i<=9;i++) if (max<v[i]) max=v[i]; // am calculat frecventa max a unei cifre; for (i=0;i<=9;i++) if (v[i]==max) cout<<i<<" "; return 0; }

8. Se citeste de la tastatura un numar natural n cu maxim cinci cifre. Afisati cel mai apropiat numar fata de n care are aceeasi suma a cifrelor. #include <iostream> #include <fstream> using namespace std; int sc(long x) { int s=0; while(x) { s+=x%10; x/=10; } return s; } int main() { long x;

ifstream f("date.txt"); f>>x; f.close(); int s=sc(x); long st=x, dr=x; do { st--; } while(sc(st)!=s); do { dr++; } while(sc(dr)!=s); ofstream g("r.txt"); if(x-st<dr-x) g<<st; else if(x-st>dr-x) g<<dr; else g<<st<<' '<<dr; return 0; }

9.Se citesc n numere naturale. Sa se ordoneze numerele crescator dupa numarul de divizori. (intensiv: numarul de divizori se va determina utilizand o metoda eficienta din punct de vedere al timpului de execusie) Exemplu: n=4, numerele 12,4,6,13s 13,4,6,12 . #include <iostream> #include <fstream> using namespace std; int nrd(long x) { int nrdiv=0; for(long int d=1;d<=x/2;d++) if(x%d==0) nrdiv++; return nrdiv+1;} int main() { long x[100]; int n,i; ifstream f("sir.txt"); f>>n;

for(i=0;i<=n-1;i++) f>>x[i]; f.close(); int sortat=0; while(!sortat) { sortat=1; for(i=0;i<=n-2;i++) if(nrd(x[i])>nrd(x[i+1])) { long aux=x[i]; x[i]=x[i+1]; x[i+1]=aux; sortat=0;}} ofstream g("rezultat.txt"); for(i=0;i<=n-1;i++) g<<x[i]<<' '; g.close(); return 0; }

10. Se citeste n numar natural (n<32000) si apoi se introduc pe rand n numere intregi. Sa se afiseze numerele prime si sa se calculeze media lor aritmetica. #include <iostream> #include <fstream> #include <math.h> using namespace std; int prim(long x) { if(x<=1) return 0; for(long d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int main() { long x; float s=0; int nrp=0,n,i; ifstream f("date.txt"); ofstream g("out.txt"); f>>n; for(i=1;i<=n;i++) {

f>>x; if(prim(x)) { g<<x<<' '; s+=x; nrp++;}} if(nrp) g<<s/nrp; f.close(); g.close(); return 0;}

11. Se citeste de la tastatura un numar natural n cu cel mult 9 cifre. Sa se afiseze cel mai mare si cel mai mic numar care se poate forma cu cifrele distincte ale numarului. #include <iostream> #include <fstream> using namespace std; int fr[10]; int main() { long n; int i; ifstream f("intrare.txt"); f>>n; f.close(); ofstream g("iesire.txt"); if(n==0) g<<0<<endl<<0; else { while(n) { fr[n%10]++; n/=10; } for(i=9;i>=0;i--) if(fr[i]) g<<i; g<<endl; if(!fr[0]) for(i=0;i<=9;i++) {if(fr[i]) g<<i;}

else { int primnenul=0; for(i=1;i<=9;i++) if(fr[i]) { if(primnenul==0) g<<i<<0; else g<<i; primnenul=1; }} }f.close();g.close(); return 0;} 12. Se citeste din fisierul numar.txt un numar natural n. Sa se verifice daca este putere a lui 2 si sa se calculeze frecvensa de aparisie a fiecarei cifre in scrierea in baza 10 a numarului. #include <iostream> #include <fstream> #include <math.h> using namespace std; int fr[10]; int main() { long n; ifstream f("numar.txt"); f>>n; f.close(); ofstream g("r.txt"); if(n==pow(2,floor(log(n)/log(2)))) g<<"ok\n"; else g<<"eroare\n"; while(n){fr[n%10]++;n/=10;} for(int i=0;i<=9;i++) g<<i<<" :: "<<fr[i]<<endl; g.close(); return 0; }

13. Scrieti un program care afiseaza pe ecran toate numerele naturale cu maxim 9 cifre care sunt rotunde(numerele care convertite in binar au acelasi numar de 0 respectiv de 1). Exemplu: 12=>1100 este rotund; 13 =>1101 nu este rotund ) #include <iostream> #include <fstream> using namespace std; int test(long x) { int nr0=0; int nr1=0; do{ if(x%2==1) nr1++; else nr0++; x/=2; } while(x>0); return nr0==nr1; } int main() { ofstream f("rezultat.txt"); long x; for(x=0;x<=999999999;x++) if(test(x)) f<<x<<endl; f.close(); return 0;}

14. Fisierul text numere.in contine pe prima linie un numar natural n (0<n<1000), iar pe a doua linie n numere naturale cu cel mult 9 cifre fiecare, despartite prin cate un spatiu. Scrieti un program C/C++ care citeste toate numerele din fisier si afiseaza pe ecran, separate prin cate un spatiu, numerele de pe a doua linie a fisierului, care sunt formate din cifre identice. Exemplu: daca fisierul numere.in are continutul: 9 55 107 3 101 99 7 208 2222 80

numerele ce se vor afisa sunt: 55 3 99 7 2222 #include <iostream> #include <fstream> using namespace std; int test(long x) { int uc=x%10; while(x) { if(x%10!=uc) return 0; x/=10; } return 1; } int main() { ifstream f("numere.in"); ofstream g("numere.out"); int n; long x; f>>n; for(int i=1;i<=n;i++) { f>>x; if(test(x)) g<<x<<' ';} f.close(); g.close(); return 0;}

15.Fisierul atestat.txt contine pe prima linie un numar natural n (n=100), iar pe a doua linie, separate prin cate un spatiu, n numere naturale nenule, cu cel mult 4 cifre fiecare. Scrieti programul C/C++ care afiseaza pe ecran cifra de control a fiecarui numar (c(4568)=c(4+5+6+8)=c(23)=5). Exemplu: daca fisierul are continutul alaturat, 7 120 346 68 9 32 0 112 atunci se afiseaza 3 4 5 9 5 0 4

#include <fstream> #include <iostream> using namespace std; int cc(unsigned short int n) { unsigned short int sc; while(n>=10) { sc=0; while(n>0) { sc+=n%10; n/=10; } n=sc; } return n;} int main() { ifstream f("atestat.txt"); unsigned short int n,x,i; f>>n; for(i=1;i<=n;i++) { f>>x; cout<<cc(x)<<' '; } f.close(); return 0;}

16. Fisierul numere.in contine pe prima linie mai multe numere naturale in ordine crescatoare dintre care cel pusin o putere a lui 3. Scrieti un algoritm eficient care afiseaza pe ecran numerele din fisier ce sunt puteri ale lui 3.

#include <iostream> #include <fstream> #include <math.h> using namespace std; int main() {

ifstream f("numere.in"); long x; while(f>>x) if(log(x)/log(3)==floor(log(x)/log(3))) cout<<x<<' '; f.close(); return 0;}

17. Dat n natural, sa se descompuna ca suma de puteri distincte ale lui 2. Exemplu : 25=24+23+20. #include <fstream> #include <iostream> #include <math.h> using namespace std; int main() { long x; cin>>x; int e;//exponentul lui 2 while(x) { e=floor(log(x)/log(2)); cout<<"2^"<<e<<endl; x-=pow(2,e);} return 0;}

18. Sa se scrie un program care sa verifice daca suma cifrelor de pe pozitiile impare si suma cifrelor de pe pozitiile pare ale unui numar natural n citit de la tastatura sunt egale. Pozitiile se numara de la dreapta la stanga incepand cu pozitia 1. Se afiseaza sumele si un mesaj corespunzator pe ecran. Exemplu: se citeste: n=12345 si se afiseaza: sp=6 si simp=9 Nu coincid! #include <fstream> #include <iostream> using namespace std; int main() { long int n; int sp=0,simp=0; cin>>n;

int p=1; while(n) { if(p%2) simp+=n%10; else sp+=n%10; n/=10; p++; } if(sp==simp) cout<<"sp="<<sp<<" si simp="<<simp<<" Coincid!"; else cout<<"sp="<<sp<<" si simp="<<simp<<" Nu Coincid!"; return 0; }

19. Sa se afiseze primele n perechi de numere prime gemene, unde n este un numar natural nenul citit de la tastatura. Exemplu: se citeste: n=4 se afiseaza: (3 ; 5) ; (5 ; 7) ; (11 ; 13) ; (17 ; 19)

#include <fstream> #include <iostream> #include <math.h> using namespace std; int prim(int x) { for(int d=2;d<=sqrt(x);d++) if(x%d==0) return 0; return 1;} int main() { int n; cin>>n; int a=3; while(n) { if(prim(a) && prim (a+2)) { cout<<'('<<a<<','<<a+2<<")\n";

n--;} a+=2;} return 0;}

20. Se citesc n numere naturale nenule. Sa se precizeze cu cate zerouri se va termina produsul numerelor fara a calcula efectiv produsul lor. Exemplu: se citeste:n=3 si numerele25, 12, 9 se afiseaza: 2 de zero #include <iostream> #include <fstream> using namespace std; int main() { ifstream f("date.txt"); int n,x,nr2=0,nr5=0; f>>n; while(n) { f>>x; while(x%2==0) { nr2++; x/=2;} while(x%5==0) { nr5++; x/=5;} n--;} ofstream g("rezultat.txt"); if(nr2>nr5) g<<nr5; else g<<nr2; g.close(); return 0; }

También podría gustarte