2019 - model
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2019 - iarnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2019 - primăvară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2019 - specială
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2019 - vară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2019 - toamnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2020 - model
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("numere.in"); int main() { int n; int x, y; int c=1; fin >> n; fin >> x; while (fin >> y) if (x!=y) { c++; x=y; } cout << n-c; return 0; }
2020 - iarnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("cifre.in"); int vf[10]; int i, j; int retin = -1; int nr_I; int c; int main() { while (fin >> c) vf[c]++; // caut cazurile cu frecvențe impare for(c=0; c<=9; c++) if (vf[c]%2==1) { nr_I++; retin = c; } if (nr_I>1) cout << "IMPOSIBIL"; else { for(c=9; c>=0; c--) // afișare "descrescătoare" for(j=1; j<=vf[c]/2; j++) cout << c; if (retin!=-1) // cifra din mijloc, dacă este cazul cout << retin; for(c=0; c<=9; c++) // afișare "crescătoare" for(j=1; j<=vf[c]/2; j++) cout << c; } return 0; }
2020 - primăvară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2020 - specială
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2020 - vară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.in"); int n, v[1001], i; int g; int main() { while (fin>>n) v[n]++; for(i=1; i<=1000; i++) if (v[i]%2!=0) g++; if (g==0 || g==1) cout << "DA"; else cout << "NU"; return 0; } /* Exemplu: bac.in conține 100 30 100 30 500 30 30 se afișează DA */
2020 - toamnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2021 - model
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> using namespace std; int main() { int i, m; // pentru linii int j, n; // pentru coloane int M[101][101]; // tabloul bidimensional int nr=0; // generez pătrate perfecte pare cin >> m >> n; // generare din colțul dreapta jos for(i=m-1; i>=0; i--) for(j=n-1; j>=0; j--) { M[i][j] = nr*nr; nr = nr+2; } for(i=0; i<m; i++) { for(j=0; j<n; j++) cout << M[i][j] <<' '; cout << '\n'; } return 0; }
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("cheltuieli.in"); int ch[101]; int tip; // tipul produsului cumpărat int nrP; // numărul de produse de acest tip cumpărate int pret; // prețul unui astfel de produs la acel moment int pretMAX; // cea mai mare sumă cheltuită pentru toate produsele de același tip int cate; // numărul de tipuri de produse pentru care s-a obținut această sumă int main() { while (fin >> tip >> nrP >> pret) ch[tip] = ch[tip] + nrP*pret; // aflu prețul maxim dintre toate tipurile, respectiv de câte ori apare for(tip=1; tip<=100; tip++) { if (pretMAX < ch[tip]) { pretMAX = ch[tip]; cate = 0; } if (pretMAX == ch[tip]) cate++; } cout << pretMAX << ' ' << cate; return 0; }
2021 - iarnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2021 - primăvară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2021 - specială
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> using namespace std; int main() { int n, k; int a[20][20]; int i, j; int t; cin >> n >> k; for(i=0; i < n; ++i) for(j=0; j < n; ++j) cin >> a[i][j]; for(i=0; i < k; ++i) // interschimbare { t = a[i][k-1]; a[i][k-1] = a[k-1][i]; a[k-1][i] = t; } for(i=0; i < n; ++i, cout << '\n') for(j=0; j < n; ++j) cout << a[i][j] << " "; return 0; } /* Exemplu pentru n=5, k=4 și tabloul 2 4 3 5 6 8 0 9 8 7 2 6 9 0 5 6 1 3 6 9 7 3 9 4 2 se obține 2 4 3 6 6 8 0 9 1 7 2 6 9 3 5 5 8 0 6 9 7 3 9 4 2 */
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; int x, y, n; ofstream fout("bac.out"); int main() { cin >> x >> y; while (y!=1) { n = (y-x)/2; // valoarea lui n, corespunzătoare termenului y=f(n) fout << y << " "; // se afișează termenul y=f(n) y = x; // se generează termenii șirului mai mici decât y x = y - 2*(n-1); } fout << 1; // termenul f(0) return 0; } /* Exemplu: dacă x=21 și y=31, fişierul conţine valorile 31 21 13 7 3 1 y x n 31 21 5, y=f(5) 21 13 4, y=f(4) 13 7 3, y=f(3) 7 3 2, y=f(2) 3 1 1, y=f(1) 1 1 , y=f(0) */
2021 - vară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2021 - toamnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2022 - model
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.txt"); int x; int pr[9], ul[9]; // secvență par-încadrată int l, lmax; // calcul lungime maximă int i; int main() { while (fin >> x) { i++; if ( x%2 == 0 ) { if ( !pr[x] ) pr[x] = i; else ul[x] = i; } } for(i=0; i<=8; i=i+2) { l = ul[i] - pr[i] + 1; if (lmax < l) lmax=l; } cout << lmax << '\n'; for(i=0; i<=8; i=i+2) if ( ul[i] - pr[i] + 1 == lmax ) cout << i << ' '; return 0; }
2022 - iarnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> #include <cstring> using namespace std; int main() { char t[101], *p; char c[11]; char stg[11]; // cuvântul din stânga cuvântului citit char mij[11]; // cuvântul curent, din mijloc char drp[11]; // cuvântul din dreapta cuvântului citit int g=0; cin >> c; cin.get(); cin.getline(t,101); p = strtok(t," "); strcpy(stg, p); p = strtok(NULL," "); strcpy(mij, p); p = strtok(NULL," "); while (p) { strcpy(drp, p); if (strcmp(c, mij)==0) { cout << stg << ' ' << drp << endl; g=1; } strcpy(stg,mij); strcpy(mij,drp); p = strtok(NULL," "); } if (g==0) cout << "nu exista"; return 0; } /* Exemple Pentru cuvântul bac și textul de mai jos: el a fost la bac si apoi a plecat cu un bac la mare se afișează: la si un la Pentru cuvântul bac și textul de mai jos: el a fost la bac se afișează: nu exista */
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin ("bac.in"); int n; int flc; // fluctuația din două zile consecutive int f_max=0; // fluctuația cea mai mare int f_min=999999999; // fluctuația cea mai mică int Vmin1, Vmin2; int Vmax1, Vmax2; int x, y; // valoarea din ziua curentă, respectiv ziua anterioară int i; int main() { fin >> n; fin >> y; for(i=2; i<=n; i++) { fin >> x; flc = (x>y)?(x-y):(y-x); if (flc<=f_min) { f_min=flc; Vmin1=y; Vmin2=x; } if (flc>=f_max) { f_max=flc; Vmax1=y; Vmax2=x; } y = x; } cout << f_max << ' ' << f_min << '\n'; cout << Vmax1 << ' ' << Vmax2 << '\n'; cout << Vmin1 << ' ' << Vmin2; return 0; }
2022 - primăvară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ofstream fout("bac.txt"); int main() { // 45 = 3 * 3 * 5 int n; int nr3 = 0; int nr5 = 0; cin >> n; // numărul de apariții ale lui 3 în descompunerea în factori primi a lui n! for(int i = 3; i <= n; i+=3) { int k = i; while (k % 3 == 0) { nr3++; k/=3; } } // numărul de apariții ale lui 5 în descompunerea în factori primi a lui n! for(int i = 5; i <= n; i+=5) { int k = i; while (k % 5 == 0) { nr5++; k/=5; } } nr3 /= 2; if (nr3 <= nr5) fout << nr3; else fout << nr5; return 0; }
2022 - specială
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2022 - vară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> using namespace std; int m, n; // nivelurile parcelelor int i, j; int plaja[102][102]; int VecinMic; int t; // cantitatea totală de nisip adăugată int main() { cin >> m >> n; for(i=1; i<=m; i++) for(j=1; j<=n; j++) cin >> plaja[i][j]; // "bordarea" plajei for(j=0; j<=n+1; j++) plaja[0][j]=10, plaja[m+1][j]=10; for(i=0; i<=m+1; i++) plaja[i][0]=10, plaja[i][n+1]=10; for(i=1; i<=m; i++) { for(j=1; j<=n; j++) { // pentru parcela [i][j], caut cel mai mic vecin VecinMic = plaja[0][0]; // 10 if (plaja[i-1][j] < VecinMic) // sus VecinMic = plaja[i-1][j]; if (plaja[i+1][j] < VecinMic) // jos VecinMic = plaja[i+1][j]; if (plaja[i][j-1] < VecinMic) // stânga VecinMic = plaja[i][j-1]; if (plaja[i][j+1] < VecinMic) // dreapta VecinMic = plaja[i][j+1]; // înnisipare if (plaja[i][j] < VecinMic) t += VecinMic-plaja[i][j]; } } cout << t; return 0; }
Subiectul III, ex 3
-----------------
2022 - toamnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2023 - model
Subiectul III, ex 1
int DoiTrei(int n) { do { if (n%10!=2 && n%10!=3) return 0; n/=10; } while(n); return 1; }
Subiectul III, ex 2
#include <iostream> using namespace std; int a[102][102], i, j, n, g; int main() { cin >> n; /* 0 - topogan, 1 - leagăn, 2 - balansoar, 3 - carusel */ for(i=1; i<=n; i++) for(j=1; j<=n; j++) cin >> a[i][j]; // bordarea suprafeței locului de joacă cu „spațiu verde”, 4 for(i=0; i<=n+1; i++) a[i][0] = a[i][n+1] = 4; for(j=0; j<=n+1; j++) a[0][j] = a[n+1][j] = 4; for(i=1; i<=n; i++) for(j=1; j<=n; j++) if (a[i][j]==3) // carusel if (a[i+1][j]!=0 && a[i-1][j]!=0 && a[i][j+1]!=0 && a[i][j-1]!=0) // niciun topogan împrejur { g = 1; cout << i << ' '; } if (!g) cout << "nu exista"; return 0; }
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.txt"); int n, x, y, i; int xMinP = 1000002; // cel mai mic număr par int xMinI = 1000001; // cel mai mic număr impar int yMaxP = -2; // cel mai mare număr par int yMaxI = -1; // cel mai mare număr impar int main() { fin >> n; // orice x, dintre primii n termeni ai șirului for(i=1; i<=n; i++) { fin >> x; if (x%2==0 && x<xMinP) xMinP=x; if (x%2==1 && x<xMinI) xMinI=x; } // orice y, dintre ultimii n termeni ai șirului for(i=1; i<=n; i++) { fin >> y; if (y%2==0 && y>yMaxP) yMaxP=y; if (y%2==1 && y>yMaxI) yMaxI=y; } if (xMinP > yMaxI && xMinI > yMaxP) cout << "DA"; else cout << "NU"; return 0; }
2023 - iarnă
Subiectul III, ex 1
void ecran(int n) // steluțe { char s[7], l[16]=""; int jm, ps; // transform numărul n în șir de caractere itoa(n, s, 10); // construiesc primul rând strcat(l, s); strcat(l, "*"); strcat(l, s); // steluța de la jumătate jm = strlen(l)/2; // pasul (sau rândul) ps = 1; while (l[0]!='*') { cout << l << endl; // plasez steluțe l[jm-ps] = '*'; l[jm+ps] = '*'; // trec la următorul pas/rând ps++; } // rândul doar cu steluțe cout << l; }
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.in"); int x; // 1 <= x <= 50 int k; // 1 <= k <= 100000 int t1, t2, t3; // numărul de cifre pentru trei termeni succesivi char cifra; int main() { fin >> x >> k; fin.get(); if (x<=8) { t1=1; t2=1; } else if (x==9) { t1=1; t2=2; } else if (x>9) { t1=2; t2=2; } while (t2!=k) { t3 = t1 + t2; t1=t2; t2=t3; } // t1 va avea numărul de cifre a termenului anterior do { fin >> cifra; cout << cifra; t1--; } while (t1); return 0; } /* Indiciu: există 3 cazuri in funcție de valoarea de plecare a lui x: Cazul 1, x<=8, vom avea șirul 1,1,2,3,5,8,13, etc. Cazul 2, x=9, vom avea șirul 1,2,3,5,8,13,21, etc. Cazul 3, x>=10,vom avea șirul 2,2,4,6,10,16,26, etc. Exemplu: dacă fișierul conține valorile de mai jos 5 8 65665656 se va afișa pe ecran numărul 65665 */
2023 - primăvară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> #include <cstring> using namespace std; char s[101]; // denumirea științifică a unei păsări char t[101]; // denumirea științifică ce păstrează doar primele trei litere char *p; // formarea entităților int main() { cin.getline(s,101); p = strtok(s," "); while (p) { if (p[strlen(p)-1]=='.') { if (p[0]=='F') strcat(t,"fam."); if (p[0]=='G') strcat(t,"gen."); if (p[0]=='S') strcat(t,"spe."); } else strcat(t,p); strcat(t," "); p=strtok(NULL, " "); } cout << t; return 0; }
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.txt"); int main () { int tC = -1; // temperatura curentă int tM = -1; // temperatura cea mai mare int tA = -1; // temperatura anterioară int pasR= 0; // pasul reprezentativ while (fin >> tC) { pasR++; if ( tM <= tC ) if ( tA != tC ) { tM = tC; cout << pasR << ' '; } tA = tC; } return 0; }
2023 - specială
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2023 - vară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.txt"); int x, i; int Vprf[100]; // vector de frecvență ce memorează numărul de apariții ale prefixului int Vsuf[100]; // vector de frecvență ce memorează numărul de apariții ale sufixului int nrV; // numărul valorilor de două cifre int main() { while (fin >> x) { if (100<=x && x<=999) // x are 3 cifre { Vprf[x/10]++; Vsuf[x%100]++; } if (1000<=x && x<=9999) // x are 4 cifre { Vprf[x/100]++; Vsuf[x%100]++; } } for(i=10; i<=99; i++) if ( Vprf[i]==Vsuf[i] && Vprf[i]!=0 ) nrV++; cout << nrV; return 0; }
2023 - toamnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> using namespace std; int a[20][20]; int m, n, i, j; int Sp; // suma într-un pătrat de valoare p int Smax = -1; int main() { cin >> m >> n; for(i=0; i<m; i++) for(j=0; j<n; j++) cin >> a[i][j]; for(i=1; i<m; i++) for(j=1; j<n; j++) { Sp = a[i-1][j-1] + a[i-1][j] + a[i][j-1] + a[i][j]; if (Smax < Sp) Smax = Sp; } cout << Smax; return 0; }
Subiectul III, ex 3
-----------------
2024 - model
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> #include <cstring> using namespace std; int n; int g_mic, g_mare; // găsit char s[101]; char mic[101], mare[101]; char *p; int main() { cin>>n; cin.get(); cin.getline(s, 101); p = strtok(s, " "); while (p) { if ( strlen(p) < n ) // mai puțin de n litere { strcat(mic, p); strcat(mic," "); g_mic=1; } if ( strlen(p) > n ) // mai mult de n litere { strcat(mare, p); strcat(mare," "); g_mare=1; } p=strtok(NULL, " "); } // prima linie să conțină mulțimea cuvintelor care au mai puțin de n litere, // iar a doua linie să conțină mulțimea cuvintelor care au mai mult de n litere. if (g_mic && g_mare) cout << mic << endl << mare; else cout << "nu exista"; // dacă una dintre cele două mulțimi este vidă, // se afișează pe ecran doar mesajul nu exista. return 0; }
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.txt"); int n1, n2, n3; // concurenţii care primesc premiile I, II, III int p1, p2, p3; // preţurile cărţilor alese int x, v[1001], k; int main() { fin >> n1 >> n2 >> n3; while (fin >> x) v[x]++; for(k=1000; k>=10; k--) // intervalul 10..1000 if (v[k] >= n1) { p1 = k; break; } for(k=p1-1; k>=10; k--) if (v[k] >= n2) { p2 = k; break; } for(k=p2-1; k>=10; k--) if (v[k] >= n3) { p3 = k; break; } if (p1 && p2 && p3) cout << p1 << ' ' << p2 << ' ' << p3; else cout << "nu exista"; return 0; }
2024 - iarnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> #include <cstring> using namespace std; int palindrom(char s[]) { int lung = strlen(s); int i; for(i = 0; i <= lung / 2; i++) if (s[i] != s[lung - i - 1]) return 0; return 1; } int voc(char s[]) { int lung = strlen(s); int vocale = 0; int i; for(i = 0; i < lung; i++) if (strchr("aeiou", s[i])) vocale++; return vocale; } int main() { char sir[256], pal[128][256], *p, t[256]; int n = 0; int i, j; cin.getline(sir, 256); p = strtok(sir, " ,"); while (p) { // formez un vector de „cuvinte de tip palindrom” if (palindrom(p)) { strcpy(pal[n], p); n++; } p = strtok(NULL, " ,"); } for(i = 0; i< n-1; i++) for(j = i + 1; j < n; j++) // ordine descrescătoare după numărul de vocale if (voc(pal[i]) > voc(pal[j])) { strcpy(t, pal[i]); strcpy(pal[i], pal[j]); strcpy(pal[j],t); } else if(voc(pal[i]) == voc(pal[j])) // ordonare lexicografică if (strcmp(pal[i], pal[j]) < 0) { strcpy(t, pal[i]); strcpy(pal[i], pal[j]); strcpy(pal[j], t); } for(i = n - 1; i >= 0; i--) cout << pal[i] << endl; return 0; }
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.txt"); int vf[10]; int n, c, i, NrPerechi; int main () { while (fin>>n) { // cifra de control if(n%9==0) c=9; else c=n%9; // vector de frecvență vf[c]++; } // calcul număr perechi (indiciu: suma Gauss) for(i=1; i<=9; i++) NrPerechi = NrPerechi + vf[i]*(vf[i]-1)/2; cout << NrPerechi; return 0; }
2024 - primăvară
Subiectul III, ex 1
int Impare(int n) { int x=0; // numărul obținut prin duplicarea fiecărei cifre impare int g=0; // găsit int p=1; while (n) { if (n%10%2==1) // cifră impară { x = x+(n%10)*p; p = p*10; x = x+(n%10)*p; p = p*10; g = 1; } else { x = x+(n%10)*p; p = p*10; } n=n/10; } if (g) return x; else return -1; }
Subiectul III, ex 2
#include <iostream> #include <cstring> using namespace std; int n, i, ok; char listaC[50][11]; // lista de cuvinte char s[101]; // șablon char t[101]; // fraza generată pe baza șablonului char *p; int main() { cin >> n; cin.get(); // citesc lista de cuvinte for(i=1; i<=n; i++) { cin >> listaC[i]; cin.get(); } // citesc șablonul cin.getline(s,101); p = strtok(s, " "); while (p) { if (p[0]=='*') // găsesc un cuvânt generic { ok = 0; for(i=1; i<=n; i++) if ( strlen(p) == strlen(listaC[i]) ) // completez cu un cuvânt din lista de cuvinte { strcat(t, listaC[i]); strcat(t, " "); ok = 1; break; } if (ok==0) // completez cu cuvântul generic { strcat(t, p); strcat(t, " "); } } else // completez cu un cuvânt din șablon { strcat(t, p); strcat(t, " "); } p = strtok(NULL, " "); } if ( strchr(t,'*') ) cout << "imposibil"; else cout << t; return 0; }
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.in"); int main() { int vf[1001]={0}; // vector de frecvență pentru [1,1000] int x; // parcurgem numerele din fișier int api=1; int i; while (fin >> x) vf[x]++; for(i = 1; i <= 1000 && api; i++) { if (vf[i]!=0) // dacă există o valoare i care a apărut în șir // numărul de apariții ale fiecărui termen este mai mic sau egal cu acel termen // și are o paritate egală cu a acestuia if ( vf[i]>i || vf[i]%2 != i%2) api = 0; } if (api) cout << "DA"; else cout << "NU"; return 0; }
2024 - specială
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
#include <iostream> using namespace std; int main() { int m, n, i, j; int a[51][51]; cin >> m >> n; for(i=1; i<=m; i++) for(j=1; j<=n; j++) { // fiecare element este egal cu cea mai mică valoare generată de // numerele de ordine ale liniei (i), respectiv coloanei (j) pe care se află. if ( i <= 9 && j <= 9 ) // i are o cifră, j are o cifră { if (i < j) a[i][j]=10*i+j; else a[i][j]=10*j+i; } if ( i > 9 && j > 9 ) // i are două cifre, j are două cifre { if (i < j) a[i][j]=100*i+j; else a[i][j]=100*j+i; } if ( i < 10 && j > 9 ) // i are o cifră, j are două cifre { if ( i <= j/10 ) a[i][j]=100*i+j; else a[i][j]=10*j+i; } if ( i > 9 && j < 10 ) // i are două cifre, j are o cifră { if ( i/10 <= j ) a[i][j]=10*i+j; else a[i][j]=100*j+i; } } for(i=1; i<=m; i++, cout << '\n') for(j=1; j<=n; j++) cout << a[i][j] << ' '; return 0; }
Subiectul III, ex 3
#include <fstream> #include <iostream> using namespace std; ifstream fin("numere.in"); int x; // din intervalul [0,99] int p=-1; // primul număr int u=-1; // al doilea număr int cmax; // cifra maximă int main() { while (fin >> x) // citirea datelor din fișier { if (x%10>=cmax) // cifra unităților { if (cmax == x%10) u=x; else p=x, u=-1; cmax = x%10; } if (x/10>=cmax) // cifra zecilor { if (cmax == x/10) u=x; else p=x, u=-1; cmax = x/10; } } if (u!=-1) cout << p << ' ' << u; else cout << "nu exista"; return 0; } /* Exemple: numere.in 34 5 38 30 87 70 11 8 82 25 se afişează pe ecran 38 82 numere.in 34 5 38 30 87 70 11 8 38 25 se afişează pe ecran 38 38 numere.in 34 5 38 30 se afişează pe ecran nu exista */
2024 - vară
Subiectul III, ex 1
int majImp(int a, int b) { int i; // parcurgerea intervalului [a,b] int d; // divizor propriu int sp; // suma divizorilor proprii pari int si; // suma divizorilor proprii impari for(i=a; i<=b; i++) { sp=0, si=0; for(d=2; d<=i/2; d++) if (i%d==0) { if (d%2==0) sp+=d; else si+=d; } if (si>sp) return i; } return 0; }
Subiectul III, ex 2
#include <iostream> #include <cstring> using namespace std; char s[101], *p; int n, ok=1; int main() { cin.getline(s,101); p=strtok(s, " "); n=strlen(p); while (p && ok) { if (strlen(p)!=n) ok=0; p=strtok(NULL, " "); } if (ok) cout << "DA " << n; else cout << "NU"; return 0; }
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ifstream fin("bac.txt"); int x, y; // cotele marcajelor turistice [10,10000] int lgC=1; // lungimea curentă int lgM=1; // lungimea maximă int u; // ultimul marcaj din scară int main() { fin >> x; lgC = 1; while (fin >> y) { if ( x==y-1 ) // cote numere consecutive, ordonate strict crescător { lgC++; } else { if ( lgC>lgM ) { lgM = lgC; u = x; } lgC = 1; } x = y; } if ( lgC>lgM ) { lgM = lgC; u = x; } if (u==0) cout << "nu exista"; else while (lgM) { cout << u-lgM+1 << ' '; lgM--; } return 0; } /* Exemple bac.txt 500 600 601 405 569 570 700 701 625 626 627 520 se afișează 625 626 627 bac.txt 500 600 601 405 569 570 700 701 625 6260 627 520 521 522 523 524 525 se afișează 520 521 522 523 524 525 bac.txt 520 521 522 523 524 525 500 600 601 405 569 570 700 701 625 626 627 87665 se afișează 520 521 522 523 524 525 bac.txt 500 600 606 405 569 57 707 7099 625 628 520 se afișează nu exista */
2024 - toamnă
Subiectul III, ex 1
moderat, Varianta I int prim(int x) { int d; if (x<2) return 0; for(d=2; d*d <= x; d++) if (x%d == 0) return 0; return 1; } int moderat(int n) { int nrP; int p1; // primul număr prim int p2; // al doilea număr prim p1 = 2; for(nrP=3; nrP<=n/2; nrP++) if (prim(nrP)) { p2 = nrP; if ( n == p1 * p2 ) return 1; p1 = p2; } return 0; } moderat, Varianta II int moderat(int n) { //folosim un vector care să rețină numerele prime necesare //cum n<=10^5, avem nevoie de cel mult al 65-lea și al 66-lea număr prim (313*317=99221) int v[66]; int nrP, i, j=0, d, nrdiv; for(nrP=2; nrP<=317; nrP++) { nrdiv = 2; // orice număr prim are exact doi divizori for(d=2; d*d<=nrP && nrdiv==2; d++) // căutăm posibili divizori if (nrP%d==0) nrdiv++; if ( nrdiv == 2 ) // nrP este prim, deci îl reținem în vector v[j++]=nrP; } for(i=0; i<j; i++) // verificăm dacă n poate fi scris ca produs de două numere prime consecutive if ( v[i]*v[i+1] == n ) return 1; return 0; }
Subiectul III, ex 2
#include <iostream> using namespace std; int g[101][101]; // grădina int i, m; int j, n; int Fmic; // floarea cea mai mică de pe rând int main() { cin >> m >> n; for(i=0; i < m; i++) for(j=0; j < n; j++) cin >> g[i][j]; for(i=1; i < m; i+=2) // rândul de flori { Fmic = 11; for(j=0; j < n; j++) if (g[i][j] < Fmic) Fmic = g[i][j]; for(j=0; j < n; j++) if (g[i-1][j] >= Fmic) // tunderea gazonului g[i-1][j] = Fmic-1; } for(i=0; i < m; i++, cout << '\n') for(j=0; j < n; j++) cout << g[i][j] << ' '; return 0; }
Subiectul III, ex 3
#include <iostream> #include <fstream> using namespace std; ofstream fout("bac.txt"); // vom afişa şirul obţinut în fişierul bac.txt int main() { int x, y, z; // numerele iniţiale int u; // următorul număr generat cin >> x >> y >> z; fout << z << " " << y << " " << x << " "; // afişăm z, y şi x în fişier în ordinea specificată do { u = (4*y-3*x-z)/2; // calculăm următorul element al şirului fout << u << " "; // îl scriem în fişier // actualizăm valorile pentru a genera următorul termen z=y; y=x; x=u; } while (y!=0); // continuăm până la al doilea 0 return 0; }
2025 - model
Subiectul III, ex 1
void pao(int x, int y, int &rez) { int xn=0; // x nou, doar cu cifre pare nenule int yn=0; // y nou, doar cu cifre pare nenule, oglindit int p; rez=0; p=1; while (x) { if (x%10%2==0 && x%10!=0) { xn = x%10*p + xn; p *= 10; } x=x/10; } while (y) { if (y%10%2==0 && y%10!=0) yn = yn*10 + y%10; y=y/10; } if (xn==yn && xn!=0 && yn!=0) rez=1; }
Subiectul III, ex 2
#include <iostream> using namespace std; int n, k, tb[100][100], i, j; int main() { cin >> k >> n; for(i=0; i<n; i++) tb[i][i] = k*(i+1); for(i=0; i<n; i++) for(j=0; j<n; j++) tb[i][j] = tb[i][i]-(j-i); for(i=0; i<n; i++, cout << '\n') for(j=0; j<n; j++) cout << tb[i][j] << ' '; return 0; }
Subiectul III, ex 3
-----------------
2025 - iarnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2025 - primăvară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2025 - specială
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2025 - vară
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------
2025 - toamnă
Subiectul III, ex 1
-----------------
Subiectul III, ex 2
-----------------
Subiectul III, ex 3
-----------------