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
-----------------