Advertisement
Guest User

bun

a guest
May 21st, 2019
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 46.58 KB | None | 0 0
  1.  
  2. Biletul nr. 1
  3.  
  4. În fişierul numere.in se află pe prima linie un numar natural n de cel mult 9 cifre. Să se descompună numărul natural n citit din fişier în sumă de termeni distincţi (excepţie facând primii doi care au amândoi valoarea 1) ai şirului Fibonacci, numărul termenilor din sumă trebuie sa fie minim. Se va utiliza o funcţie pentru crearea unui nou termen al descompunerii.
  5. Şirul lui Fibonacci, “legea creşterilor organice”, se va considera aşa cum a fost definit de către Leonardo Fibonacci:1,1,2,3,5,8…
  6.  
  7. Exemple:
  8. pentru n=13 se afişează 8+5 ;
  9. pentru n=23 se afişeaza 21+2.
  10.  
  11. Barem de corectare
  12. • -declaraţii corecte 1p
  13. • -citirea corectă a datelor 1p
  14. • -definirea corectă a funcţiei 2p
  15. • -algoritm de rezolvare corect 3p
  16. • -afşare corectă a datelor 1p
  17. • -corectitudinea sintactică a programului 1p
  18.  
  19. Notă: Se acordă 1 punct din oficiu.
  20.  
  21. # include<iostream>
  22. # include<fstream>
  23. using namespace std;
  24. ifstream fin("numere.in");
  25.  
  26. long nrfib(long n)
  27. {
  28. if (n<2)
  29. return n;
  30. return nrfib(n-1)+nrfib(n-2);
  31. }
  32. int main()
  33. {
  34. long n,s,i,m;
  35. fin>>n;
  36. cout<<n<<" = ";
  37. m=n;
  38. while (n>0)
  39. {
  40. i=0;
  41. s=0;
  42. while (s<n)
  43. {
  44. i++;
  45. s=nrfib(i);
  46. }
  47. if (s==n)
  48. {
  49. if (n==m)
  50. {
  51. cout<<nrfib(i-1)<<" + "<<nrfib(i-2);
  52. n=0;
  53. }
  54. else
  55. {
  56. cout<<nrfib(i);
  57. n=0;
  58. }
  59. }
  60. else
  61. {
  62. s=nrfib(i-1);
  63. cout<<s<<" + ";
  64. n=n-s;
  65. }
  66. }
  67. return 0;
  68. }
  69.  
  70.  
  71.  
  72. Biletul nr. 2
  73.  
  74. În fişierul numere.in se află pe prima linie maxim un milion de numere naturale de cel mult 2 cifre fiecare. Să se găsească un procedeu eficient de determinare a numărului care se repetă cel mai des. Eficienţa procedeului constă în utilizarea unei singure treceri prin numere, după ce acestea au fost citite toate, pentru a se determina acel număr care se repetă de cele mai multe ori.
  75.  
  76. Exemplu :
  77.  
  78. DATE.TXT se afişeazăl
  79. 5 3 1 6 3 1 3 6 1 3 3
  80.  
  81. Barem de corectare
  82. • -declaraţii corecte 1p
  83. • -citirea corectă a datelor din fisier 1p
  84. • -algoritm de rezolvare corect 4p
  85. • -eficienţa algoritmului 1p
  86. • -afişare corectă a datelor 1p
  87. • -corectitudinea sintactică a programului 1p
  88.  
  89. Notă: Se acordă 1 punct din oficiu.
  90.  
  91. #include <iostream>
  92. #include <fstream>
  93. using namespace std;
  94. ifstream fin("numere.in");
  95. int n,maxim,maxi,i,fr[100];
  96. int main()
  97. {
  98. while(fin>>n)
  99. { fr[n]++;
  100. }
  101. maxim=fr[0];
  102. for(i=1;i<=99;i++)
  103. if(fr[i]>maxim)
  104. {
  105. maxim=fr[i];
  106. maxi=i;
  107. }
  108. cout<<"Nr care se repeta de cele mai multe ori ("<<maxim<<") este: "<<maxi;
  109. return 0;
  110. }
  111.  
  112.  
  113.  
  114. Biletul nr. 3
  115.  
  116. În fişierul numere.in se află pe prima linie un număr natural n (n<=9), iar pe a doua linie se află numere naturale a1, a2, ….., an din multimea cifrelor zecimale ({0,1,2,….., 9}). Se cere să se calculeze suma S= a1a2…an + ana1a2…an-1 + … + a2a3…ana1, utilizând un proces iterativ de calcul al însumării, termenul curent de însumat fiind obţinut prin rotaţia la dreapta aplicată precedentului termen. Pentru obţinerea termenului curent al sumei se va aplica un procedeu eficient prin care să se evite crearea puterilor lui 10.
  117.  
  118. Exemplu:fie n=3; a1=2; a2=5; a3=4; S=254 + 425 + 542 =1221
  119.  
  120. Barem de corectare
  121. • -declaraţii corecte 1p
  122. • -citirea corectă a datelor din fisier 1p
  123. • -determinare corectă a termenilor sumei 1p
  124. • -algoritm de rezolvare corect 3p
  125. • -afişare corectă a datelor 1p
  126. • -corectitudinea sintactică a programului 1p
  127.  
  128. Notă: Se acordă 1 punct din oficiu.
  129.  
  130. # include<iostream>
  131. # include<fstream>
  132. using namespace std;
  133. ifstream fin("numere.in");
  134. int n, a[100];
  135. int termen(int n,int a[100])
  136. {
  137. int nr=0,aux;
  138. for(int i=1;i<=n;i++)
  139. nr=nr*10+a[i];
  140. aux=a[n];
  141. for(int i=n;i>1;i--)
  142. a[i]=a[i-1];
  143. a[1]=aux;
  144. return nr;
  145. }
  146. int main()
  147. {
  148. int s=0;
  149. fin>>n;
  150. for(int i=1;i<=n;i++)
  151. fin>>a[i];
  152. cout<<"S=";
  153. for(int i=1;i<=n;i++)
  154. {
  155. s=s+termen(n,a);
  156. cout<<termen(n,a);
  157. if(i<n)
  158. cout<<"+";
  159. }
  160. cout<<"="<<s;
  161. return 0;
  162. }
  163.  
  164.  
  165.  
  166. Biletul nr. 4
  167.  
  168. În fişierul cuvinte.in se află câte unul pe linie un şir de cuvinte. Să se scrie un program care citeşte cuvintele din fişier şi le afişează în fişierul cuvinte.out în ordine alfabetică. Pentru ordonarea alfabetică veţi utiliza unul din algoritmii de sortare studiaţi.
  169.  
  170. Exemplu:
  171.  
  172. cuvinte.in Cuvinte.out
  173. Dana
  174. Are
  175. Bomboane Are
  176. Bomboane
  177. Dana
  178.  
  179. Barem de corectare
  180. • -declaraţii corecte 1p
  181. • -citirea corectă a datelor din fisier 1p
  182. • -algoritm de sortare corect 2p
  183. • -algoritm de rezolvare corect 3p
  184. • -afişare corectă a datelor în fişier 1p
  185. • -corectitudinea sintactica a programului 1p
  186.  
  187. Notă: Se acordă 1 punct din oficiu.
  188.  
  189. #include <iostream>
  190. #include <fstream>
  191. #include <cstring>
  192. using namespace std;
  193. ifstream fin("date.in");
  194. char s[101][31],x[31];
  195. int n,i,j;
  196. int main()
  197. {
  198. while(fin>>x)
  199. {
  200. n++;
  201. strcpy(s[n],x);
  202. }
  203. for(i=1;i<n;i++)
  204. for(j=i+1;j<=n;j++)
  205. if(strcmp(s[i],s[j])>0)
  206. {
  207. strcpy(x,s[i]);
  208. strcpy(s[i],s[j]);
  209. strcpy(s[j],x);
  210. }
  211. for(i=1;i<=n;i++)
  212. cout<<s[i]<<'\n';
  213. fin.close();
  214. return 0;
  215. }
  216.  
  217.  
  218.  
  219.  
  220. Biletul nr. 5
  221. Subprogramul sub primeşte prin intermediul parametrului n (0<n<20) dimensiunea unei matrice pătrate, prin intermediul parametrului a matricea de numere reale (aij cu 1in, 1jn) şi prin intermediul parametrului k un număr natural nenul (1<k<=2n). El returnează prin intermediul parametrului s suma tuturor elementelor aij cu proprietatea că i+j=k. Scrieţi programul care citeşte de la tastatură un tablou de numere reale cu n linii şi n coloane şi afişează suma elementelor din tablou aflate strict deasupra diagonalei secundare a tabloului, folosind apeluri ale subprogramului sub, definit conform cerinţei.
  222. Exemplu:
  223.  
  224. Date de intrare se afişează
  225. 4
  226. 1 6 3 1
  227. 6 1 3 1
  228. 1 3 1 6
  229. 3 1 6 1 20
  230.  
  231. Barem de corectare
  232. • -declaraţii corecte 1p
  233. • -citirea corectă a datelor din fişier 1p
  234. • -definirea corectă a funcţiei 2p
  235. • -algoritm de rezolvare corect 3p
  236. • -afişare corectă a datelor 1p
  237. • -corectitudinea sintactică a programului 1p
  238.  
  239. Notă: Se acordă 1 punct din oficiu.
  240.  
  241. #include <iostream>
  242. #include <fstream>
  243. using namespace std;
  244. ifstream fin("date.in");
  245. int sub(int n, int a[20][20], int k)
  246. {
  247. int i,j,s=0;
  248. for(i=1;i<=n;i++)
  249. for(j=1;j<=n;j++)
  250. if(i+j==k)
  251. s=s+a[i][j];
  252. return s;
  253. }
  254. int main()
  255. {
  256. int n,i,j,a[20][20],s=0;
  257. fin>>n;
  258. for(i=1;i<=n;i++)
  259. for(j=1;j<=n;j++)
  260. fin>>a[i][j];
  261. for(i=2;i<=n;i++)
  262. s=s+sub(n,a,i);
  263. cout<<"Suma este = "<<s;
  264. fin.close();
  265. return 0;
  266. }
  267.  
  268.  
  269.  
  270. Biletul nr. 6
  271.  
  272. Se citesc de la tastatură două numere naturale nenule a şi b (3<a<b) de cel mult 9 cifre fiecare. Să se determine, dacă există, un număr prim x care aparţine intervalului închis [a,b] pentru care valoarea expresiei |b+a-2x| este minimă. S-a folosit notaţia |m| pentru modulul numărului m. Dacă nu există un astfel de număr, se va afişa valoarea 0, iar dacă există mai multe, se va afişa unul dintre ele.
  273. Exemplu:
  274. pentru a=7 şi b=18, dintre numerele prime 7, 11, 13 şi 17, se va afişa 13 deoarece |18+7-213|<|18+7-211|<|18+7-217|<|18+7-27|. Pentru rezolvarea problemei se va utiliza o funcţie prim care primeşte prin intermediul parametrului n un număr natural (n>1) şi stabileşte în mod eficient dacă numărul n este prim sau nu.
  275.  
  276. Barem de corectare
  277. • -declaraţii corecte 1p
  278. • -citirea corectă a datelor din fişier 1p
  279. • -definirea corectă a funcţiei 2p
  280. • -algoritm de rezolvare corect 3p
  281. • -afişare corectă a datelor 1p
  282. • -corectitudinea sintactică a programului 1p
  283.  
  284. Notă: Se acordă 1 punct din oficiu.
  285.  
  286. #include <iostream>
  287. #include <cmath>
  288. using namespace std;
  289. long a,b,minim,i,nr;
  290. int prim(int n)
  291. {
  292. int d;
  293. for(d=2;d<=sqrt(n);d++)
  294. if(n%d==0)
  295. return 0;
  296. return 1;
  297. }
  298. int main()
  299. {
  300. cin>>a>>b;
  301. minim=999999999;
  302. for(i=a;i<=b;i++)
  303. if(prim(i)==1)
  304. if(abs(b+a-2*i)<minim)
  305. {
  306. minim=abs(b+a-2*i);
  307. nr=i;
  308. }
  309. cout<<nr;
  310. return 0;
  311. }
  312.  
  313.  
  314.  
  315. Biletul nr. 7
  316.  
  317. Subprogramul apcar primeşte prin intermediul parametrului s un şir cu cel mult 255 de caractere şi prin parametrul c un caracter. El returnează prin intermediul parametrului p un număr natural reprezentând numărul de apariţii ale caracterului c în şirul s. Scrieţi programul care citeşte de la tastatură un şir de caractere (litere mari şi cifre). Se cere să se determine numărul total de vocale din şirul dat, folosind apeluri ale subprogramului apcar, definit conform cerinţei.
  318.  
  319. Exemplu :
  320.  
  321. Pentru s= "VULPEA11VULPEA22" se va afisa 6 (deoarece sunt 6 vocale in şir)
  322.  
  323. Barem de corectare
  324. • -declaraţii corecte 1p
  325. • -citirea corectă a datelor 1p
  326. • -definirea corectă a funcţiei 2p
  327. • -algoritm de rezolvare corect 3p
  328. • -afişare corectă a datelor 1p
  329. • -corectitudinea sintactică a programului 1p
  330.  
  331. Notă: Se acordă 1 punct din oficiu.
  332.  
  333. #include <iostream>
  334. #include <fstream>
  335. #include <cstring>
  336. using namespace std;
  337. ifstream fin("date.in");
  338. char s[256],c,voc[]="AEIOU";
  339. int n,nr,i;
  340. int apcar(char s[256], char c)
  341. {
  342. int p=0,i;
  343. for (i=0;i<n;i++)
  344. if(s[i]==c)
  345. p++;
  346. return p;
  347. }
  348. int main()
  349. {
  350. fin>>s;
  351. n=strlen(s);
  352. for(i=0;i<=4;i++)
  353. nr=nr+apcar(s,voc[i]);
  354. cout<<nr;
  355. fin.close();
  356. return 0;
  357. }
  358.  
  359.  
  360.  
  361. Biletul nr. 8
  362.  
  363. Se citesc n (n număr natural, n>1) şi apoi n numere reale x1, x2, ..., xn. Să se determine câte dintre cele n numere citite se află în afara intervalului închis determinat de numerele x1 şi xn.
  364.  
  365. Exemplu:
  366.  
  367. pentru n=6 şi numerele 2, 0.5, 4, -1, -8, -3, se afişează valoarea 2 (deoarece două dintre numerele date, cele subliniate, se află în afara intervalului determinat de numerele 2 şi –3).
  368.  
  369. Barem de corectare
  370. • -declaraţii corecte 1p
  371. • -citirea corectă a datelor 1p
  372. • -algoritm de rezolvare corect 4p
  373. • -tratarea ambelor cazuri (x1<xn şi x1≥xn) 1p
  374. • -afişare corectă a datelor 1p
  375. • -corectitudinea sintactică a programului 1p
  376.  
  377. Notă: Se acordă 1 punct din oficiu.
  378.  
  379. #include <iostream>
  380. #include <fstream>
  381. using namespace std;
  382. ifstream fin("date.in");
  383. int n,k,i;
  384. float aux,x[100];
  385. int main()
  386. { fin>>n;
  387. k=0;
  388. for(i=1;i<=n;i++)
  389. fin>>x[i];
  390. if(x[1]>x[n])
  391. {
  392. aux=x[1];
  393. x[1]=x[n];
  394. x[n]=aux;
  395. }
  396. for(i=2;i<n;i++)
  397. if(x[i]<=x[1] || x[i]>=x[n])
  398. k++;
  399. cout<<k;
  400. return 0;}
  401.  
  402.  
  403.  
  404. Biletul nr. 9
  405.  
  406. Din fişierul DATE.TXT se citesc n şi m (n, m numere naturale, 0<m<n<5000) de pe prima linie,apoi n numere naturale a1, a2, …, an de pe linia a doua şi apoi m numere naturale b1, b2, …, bm de pe linia a treia a fişierului. Să se verifice dacă şirul b citit de pe a treia linie a fişierului se poate obţine din şirul a (aflat pe a doua linie a fişierului) prin eliminarea unora dintre componentele şirului a. Să se scrie programul ce realizează prelucrarea descrisă folosind un algoritm eficient si afişează pe ecran un mesaj corespunzător.
  407.  
  408. Exemplu:
  409.  
  410. DATE.TXT se afişează mesajul
  411. 5 3
  412. 1 6 3 1 3
  413. 6 1 3 “b se poate obtine din a"
  414.  
  415.  
  416. Barem de corectare
  417. • -declaraţii corecte 1p
  418. • -citirea corectă a datelor din fişier 1p
  419. • -algoritm de rezolvare corect 4p
  420. • -eficienţa algoritmului 1p
  421. • -afişare corectă a datelor 1p
  422. • -corectitudinea sintactică a programului 1p
  423.  
  424. Notă: Se acordă 1 punct din oficiu.
  425.  
  426. #include <fstream>
  427. #include <iostream>
  428. using namespace std;
  429. ifstream fin("numere.in");
  430. int a[5001], b[5001], i, x, verif, n, m;
  431. int main()
  432. {
  433. fin>>n>>m;
  434. for(i=1; i<=n; i++)
  435. {
  436. fin>>x;
  437. a[x]++;
  438. }
  439. for(i=1; i<=m; i++)
  440. fin>>b[i];
  441. for(i=1; i<=m && verif==0; i++)
  442. if(a[b[i]]>0)
  443. a[b[i]]--;
  444. else verif=1;
  445. if (verif==1)
  446. cout<<"b nu se poate obtine din a";
  447. else cout<<"b se poate obtine din a";
  448. fin.close();
  449. return 0;
  450. }
  451.  
  452.  
  453.  
  454. Biletul nr. 10
  455.  
  456. Scrieţi un program care citeşte din fişierul text DATE.TXT un şir S de maxim 100.000 de numere naturale formate din exact două cifre fiecare şi afişează distanţa maximă care există între două elemente egale ale şirului. Definim distanţa dintre două elemente Si si Sj prin modulul diferenţei indicilor celor două elemente, |j-i|. Dacă şirul conţine doar elemente distincte, distanţa cerută este 0.
  457.  
  458. Exemplu:
  459.  
  460. DATE.TXT se afişează Explicaţii
  461. 14 12 10 10 14 15 10 12 90 6 (s2=s8=12, 8-2=6)
  462.  
  463. Barem de corectare
  464. • -declaraţii corecte 1p
  465. • -citirea corectă a datelor din fişier 1p
  466. • -determinare corectă a distanţei dintre 2 elemente 1p
  467. • -algoritm de rezolvare corect 4p
  468. • -afişare corectă a datelor 1p
  469. • -corectitudinea sintactică a programului 1p
  470.  
  471. Notă: Se acordă 1 punct din oficiu.
  472.  
  473. #include <iostream>
  474. #include <fstream>
  475. using namespace std;
  476. ifstream fin("date.txt");
  477. int n,i,j,maxim,a[100001];
  478. int main()
  479. { maxim=0;
  480. i=1;
  481. while(fin>>a[i])
  482. i++;
  483. n=i-1;
  484. for(i=1;i<n;i++)
  485. for(j=i+1;j<=n;j++)
  486. if(a[i]==a[j])
  487. if(j-i>maxim)
  488. maxim=j-i;
  489. cout<<maxim;
  490. fin.close();
  491. return 0; }
  492.  
  493.  
  494.  
  495.  
  496.  
  497. Biletul nr. 11
  498.  
  499.  
  500. a. Scrieţi o definiţie completă pentru un subprogram suma cu trei parametri:
  501. – x, matrice pătratică cu elemente întregi;
  502. – n, număr natural ce reprezintă numărul efectiv de linii şi coloane ale matricei x, 2≤n≤10;
  503. – p, număr natural, 1≤p≤n.
  504. Subprogramul va returna suma elementelor aflate pe linia p a matricei.
  505. b. Scrieţi un program care citeşte din fişierul matrice.in un număr natural n şi o matrice cu n linii şi n coloane şi afişează în fişierul matrice.out indicii liniilor din matrice pentru care suma elementelor este număr par. Se va folosi subprogramul definit la punctul a.
  506.  
  507. Ex:
  508. matrice.in matrice.out
  509. 4
  510. 1 2 3 4
  511. 1 1 1 2
  512. 2 2 41 8
  513. 3 3 10 2 1 4
  514.  
  515.  
  516.  
  517. Barem de corectare
  518.  
  519. • declarări corecte de date – 1 punct
  520. • citirea corectă a datelor – 1 punct
  521. • subprogramul suma – 3 puncte
  522. • cele n apeluri ale subprogramului – 1 punct
  523. • verificarea parităţii rezultatului returnat de subprogram – 1 punct
  524. • scrierea rezultatelor cerute – 1 punct
  525. • corectitudinea sintactică a programului – 1 punct
  526.  
  527. Notă: Se acordă 1 punct din oficiu.
  528.  
  529. #include <iostream>
  530. #include <fstream>
  531. using namespace std;
  532. ifstream fin("matrice.in");
  533. ofstream fout("matrice.out");
  534. int n,i,j,x[11][11];
  535. int suma(int x[11][11], int n, int p)
  536. {
  537. int i,s=0;
  538. for(i=1;i<=n;i++)
  539. s=s+x[p][i];
  540. return s;
  541. }
  542. int main()
  543. {
  544. fin>>n;
  545. for(i=1;i<=n;i++)
  546. for(j=1;j<=n;j++)
  547. fin>>x[i][j];
  548. for(i=1;i<=n;i++)
  549. if(suma(x,n,i)%2==0)
  550. fout<<i<<" ";
  551. fin.close();
  552. fout.close();
  553. return 0;
  554. }
  555.  
  556.  
  557.  
  558. Biletul nr. 12
  559.  
  560. Pe prima linie a fişierului date.in se găseşte un număr natural n, n≤100, iar a doua linie conţine un şir cu n numere naturale, separate prin cate un spaţiu. Sa se scrie în fişierul date.out toate numerele prime din sir, separate prin cate un spaţiu. Se va folosi o funcţie prim care verifica daca un număr natural, dat ca parametru de intrare, este număr prim.
  561.  
  562. Ex:
  563. date.in date.out
  564. 5
  565. 12 2 123 41 77 2 41
  566.  
  567. Barem de corectare
  568. • declarări corecte de date – 1 punct
  569. • citirea corectă a datelor – 1 punct
  570. • funcţia prim – 3 puncte
  571. • cele n apeluri ale funcţiei – 1 punct
  572. • verificarea rezultatului returnat de funcţie – 1 punct
  573. • scrierea rezultatelor cerute – 1 punct
  574. • corectitudinea sintactică a programului – 1 punct
  575.  
  576.  
  577. Notă: Se acordă 1 punct din oficiu.
  578.  
  579. #include <iostream>
  580. #include <fstream>
  581. using namespace std;
  582. ifstream fin("date.in");
  583. ofstream fout("date.out");
  584. int n,i,x;
  585. int prim(int n)
  586. {
  587. if(n<2)
  588. return 0;
  589. for(int d=2;d<=n/2;d++)
  590. if(n%d==0)
  591. return 0;
  592. return 1;
  593. }
  594. int main()
  595. {
  596. fin>>n;
  597. for(i=1;i<=n;i++)
  598. {
  599. fin>>x;
  600. if(prim(x)==1)
  601. fout<<x<<" ";
  602. }
  603. fin.close();
  604. return 0;
  605. }
  606.  
  607.  
  608.  
  609.  
  610. Biletul nr. 13
  611.  
  612.  
  613. Se citeşte de la tastatura un număr natural n, 2≤n≤10. Să se construiască o matrice cu n linii şi n coloane care sa conţină pe fiecare linie cate o permutare a mulţimii {1,2,…,n}, astfel încât pe linii diferite sa avem permutări diferite. Matricea se va afişa pe ecran ca matrice.
  614.  
  615.  
  616.  
  617. Ex:
  618. tastatură ecran
  619. 4 1 2 3 4
  620. 2 3 4 1
  621. 3 4 1 2
  622. 4 1 2 3
  623.  
  624.  
  625. Barem de corectare
  626.  
  627. • declarări corecte de date – 1 punct
  628. • citirea corectă a datelor – 1 punct
  629. • generarea unei permutări pe fiecare linie – 1 punct
  630. • generarea de permutări diferite pe linii diferite – 2 punct
  631. • algoritm de rezolvare corect – 2 puncte
  632. • scrierea rezultatelor cerute – 1 punct
  633. • corectitudinea sintactică a programului – 1 punct
  634.  
  635. Notă: Se acordă 1 punct din oficiu.
  636.  
  637. #include <iostream>
  638. using namespace std;
  639. int n,i,j,k,a[11][11],nr,m;
  640. int main()
  641. {
  642. cin>>n;
  643. for(i=1;i<=n;i++)
  644. for(j=1;j<=n;j++)
  645. a[i][j]=j;
  646. m=1;
  647. for(i=2;i<=n;i++)
  648. {
  649. for(k=1;k<=m;k++)
  650. {
  651. nr=a[i][1];
  652. for(j=1;j<n;j++)
  653. a[i][j]=a[i][j+1];
  654. a[i][n]=nr;
  655. }
  656. m++;
  657. }
  658. for(i=1;i<=n;i++)
  659. {
  660. for(j=1;j<=n;j++)
  661. cout<<a[i][j]<<" ";
  662. cout<<'\n';
  663. }
  664. return 0;
  665. }
  666.  
  667.  
  668.  
  669. Biletul nr. 14
  670.  
  671.  
  672. Pe prima linie a fişierului date.in se găseşte un număr natural n, n≤100, iar a doua linie conţine un şir cu n numere naturale, separate prin cate un spaţiu. Sa se scrie în fişierul date.out toate numerele din şir care sunt termini din Şirul lui Fibonacci. Se va folosi o funcţie test_fibo care verifică daca un număr natural, dat ca parametru de intrare, este termen în şirul lui Fibonacci (f1=1, f2=1, fn=fn-1+fn-2, pentru n>2).
  673.  
  674. Ex:
  675. date.in date.out
  676. 7
  677. 4 7 1 10 21 13 5 1 21 5
  678.  
  679.  
  680.  
  681. Barem de corectare
  682.  
  683. • declarări corecte de date – 1 punct
  684. • citirea corectă a datelor – 1 punct
  685. • funcţia test_fibo – 3 puncte
  686. • cele n apeluri ale funcţiei – 1 punct
  687. • verificarea rezultatului returnat de funcţie – 1 punct
  688. • scrierea rezultatelor cerute – 1 punct
  689. • corectitudinea sintactică a programului – 1 punct
  690.  
  691. Notă: Se acordă 1 punct din oficiu.
  692.  
  693. #include <iostream>
  694. #include <fstream>
  695. using namespace std;
  696. ifstream fin("date.in");
  697. int n,x;
  698. int fibo(int n)
  699. {
  700. long a=1,b=1,c;
  701. if(n<=3)
  702. return 1;
  703. while(a+b<=n)
  704. {
  705. c=a+b;
  706. a=b;
  707. b=c;
  708. }
  709. return(c==n);
  710. }
  711. int main()
  712. {
  713. fin>>n;
  714. while(n>0)
  715. {
  716. fin>>x;
  717. if(fibo(x));
  718. cout<<x<<" ";
  719. n--;
  720. }
  721. fin.close();
  722. return 0;
  723. }
  724.  
  725.  
  726.  
  727.  
  728. Biletul nr. 15
  729.  
  730.  
  731. Se citesc din fişierul numere.in doua numere naturale a şi b cu cel mult 9 cifre fiecare. Se cere sa se scrie în fişierul numere.out cel mai mare numărul natural care se poate forma cu toate cifrele celor doua numere.
  732.  
  733.  
  734. Ex:
  735. numere.in numere.out
  736. 36321
  737. 4173 764333211
  738.  
  739.  
  740.  
  741. Barem de corectare
  742.  
  743. • declarări corecte de date – 1 punct
  744. • citirea corectă a datelor – 1 punct
  745. • determinarea corectă a cifrelor numerelor – 2 puncte
  746. • determinarea numărului maxim cu toate cifrele celor doua numere – 3 puncte
  747. • scrierea rezultatelor cerute – 1 punct
  748. • corectitudinea sintactică a programului – 1 punct
  749.  
  750. Notă: Se acordă 1 punct din oficiu.
  751.  
  752. #include <iostream>
  753. #include <fstream>
  754. using namespace std;
  755. ifstream fin("numere.in");
  756. ofstream fout("numere.out");
  757. int a,b,i,k,fr[10];
  758. int main()
  759. {
  760. fin>>a>>b;
  761. while(a>0)
  762. {
  763. fr[a%10]++;
  764. a=a/10;
  765. }
  766. while(b>0)
  767. {
  768. fr[b%10]++;
  769. b=b/10;
  770. }
  771. for(i=9;i>=0;i--)
  772. if(fr[i]>0)
  773. for(k=1;k<=fr[i];k++)
  774. fout<<i;
  775. fin.close();
  776. fout.close();
  777. return 0;
  778. }
  779.  
  780.  
  781.  
  782.  
  783. Biletul nr. 16
  784.  
  785.  
  786. Din fişierul numere.in se citesc, de pe prima linie, bazele b1, b2, şi b3 pentru trei sisteme de numeraţie, 2≤b1, b2, b3≤9. De pe a doua linie se citesc doua numere naturale: x în baza b1 şi y în baza b2. Sa se scrie în fişierul numere.out suma numerelor x şi y în baza b3
  787.  
  788. numere.in numere.out Explicatii
  789. 2 5 3
  790. 110 213 2101 1102= 6
  791. 2135=58
  792. 6+58=64
  793. 64=21013
  794.  
  795.  
  796. Barem de corectare
  797.  
  798. • declarări corecte de date – 1 punct
  799. • citirea corectă a datelor – 1 punct
  800. • trecerea numerelor x şi y din bazele b1, respectiv b2, în baza 10 – 3 puncte
  801. • calcularea sumei x+y şi trecerea ei în baza b3 – 2 puncte
  802. • scrierea rezultatelor cerute – 1 punct
  803. • corectitudinea sintactică a programului – 1 punct
  804.  
  805. Notă: Se acordă 1 punct din oficiu.
  806.  
  807. #include <fstream>
  808. using namespace std;
  809. ifstream fin("numere.in");
  810. ofstream fout("numere.out");
  811. int b1,b2,b3;
  812. long x,y;
  813. long conv_b_10(long n, int b)
  814. {
  815. long nr=0,p=1;
  816. do
  817. {
  818. nr=nr+n%10*p;
  819. p*=b;
  820. n/=10;
  821. } while(n);
  822. return nr;
  823. }
  824. long conv_10_b(long n, int b)
  825. {
  826. long nr=0,p=1;
  827. do
  828. {
  829. nr=nr+n%b*p;
  830. p*=10;
  831. n/=b;
  832. } while(n);
  833. return nr;
  834. }
  835.  
  836. int main()
  837. {
  838. fin>>b1>>b2>>b3;
  839. fin>>x>>y;
  840. x=conv_b_10(x,b1);
  841. y=conv_b_10(y,b2);
  842. fout<<conv_10_b(x+y,b3);
  843. fin.close();
  844. fout.close();
  845. return 0;
  846. }
  847.  
  848.  
  849.  
  850.  
  851. Biletul nr. 17
  852.  
  853.  
  854.  
  855. Pe prima linie a fişierului date.in se găseşte un număr natural n, n≤100, iar a doua linie conţine un şir cu n numere naturale, separate prin cate un spaţiu. Sa se scrie în fişierul date.out toate numerele din şir pentru care suma cifrelor este divizibila cu 3. Se va folosi o funcţie recursive suma_cifre care calculează şi returnează suma cifrelor parametrului de intrare x.
  856.  
  857.  
  858.  
  859. Ex:
  860. date.in date.out
  861. 7
  862. 124 51 231 7 24 31 5 51 231 24
  863.  
  864.  
  865.  
  866. Barem de corectare
  867. • declarări corecte de date – 1 punct
  868. • citirea corectă a datelor – 1 punct
  869. • funcţia suma_cifre – 3 puncte
  870. • cele n apeluri ale funcţiei – 1 punct
  871. • verificarea rezultatului returnat de funcţie – 1 punct
  872. • scrierea rezultatelor cerute – 1 punct
  873. • corectitudinea sintactică a programului – 1 punct
  874.  
  875.  
  876. Notă: Se acordă 1 punct din oficiu.
  877.  
  878. #include <iostream>
  879. #include <fstream>
  880. using namespace std;
  881. ifstream fin("date.in");
  882. ofstream fout("date.out");
  883. int n,i,x;
  884. int suma_cifre(int n)
  885. {
  886. if(n==0)
  887. return 0;
  888. else return n%10+suma_cifre(n/10);
  889. }
  890. int main()
  891. {
  892. fin>>n;
  893. for(i=1;i<=n;i++)
  894. {
  895. fin>>x;
  896. if(suma_cifre(x)%3==0)
  897. fout<<x<<" ";
  898. }
  899. fin.close();
  900. fout.close();
  901. return 0;
  902. }
  903.  
  904.  
  905.  
  906.  
  907. Biletul nr. 18
  908.  
  909.  
  910.  
  911. In fişierul multimi.in se dau, pe prima linie, două numere naturale n şi m separate printr-un spaţiu, 2≤n,m≤100, iar pe următoarele două linii, separate prin cate un spaţiu, în ordinea strict crescătoare, elementele a doua mulţimi de numere naturale, Se cere să scrie în fişierul multimi.out, în ordine strict crescătoare, elementele reuniunii celor doua mulţimi.
  912.  
  913.  
  914. Ex:
  915. multimi.in multimi.out
  916. 6 4
  917. 1 3 4 7 10 43
  918. 3 5 10 37 1 3 4 5 7 10 37 43
  919.  
  920.  
  921.  
  922. Barem de corectare
  923.  
  924. • declarări corecte de date – 1 punct
  925. • citirea corectă a datelor – 1 punct
  926. • construirea corecta a reuniunii celor doua mulţimi – 4 puncte
  927. • scrierea rezultatelor cerute – 2 puncte
  928. • corectitudinea sintactică a programului – 1 punct
  929.  
  930. Notă: Se acordă 1 punct din oficiu.
  931.  
  932. #include <iostream>
  933. #include <fstream>
  934. using namespace std;
  935. ifstream fin("multimi.in");
  936. ofstream fout("multimi.out");
  937. int n,m,i,j,a[101],b[101];
  938. int main()
  939. {
  940. fin>>n>>m;
  941. for(i=1;i<=n;i++)
  942. fin>>a[i];
  943. for(j=1;j<=m;j++)
  944. fin>>b[j];
  945. i=1;j=1;
  946. fin>>a[i]; fin>>b[j];
  947. while(i<=n && j<=m)
  948. {
  949. if(a[i]<b[j])
  950. {
  951. fout<<a[i]<<" ";
  952. i++;
  953. }
  954. else if(a[i]>b[j])
  955. {
  956. fout<<b[j]<<" ";
  957. j++;
  958. }
  959. else
  960. {
  961. fout<<a[i]<<" ";
  962. i++; j++;
  963. }
  964. }
  965. while(i<=n)
  966. {
  967. fout<<a[i]<<" ";
  968. i++;
  969. }
  970. while(j<=m)
  971. {
  972. fout<<b[j]<<" ";
  973. j++;
  974. }
  975. fin.close();
  976. fout.close();
  977. return 0;
  978. }
  979.  
  980.  
  981.  
  982.  
  983. Biletul nr. 19
  984.  
  985.  
  986. Scrieţi un program care citeşte de pe prima linie a fişierului date.in un număr natural n iar de pe următoarele linii o matrice cu n linii şi n coloane conţinând numere naturale şi modifica matricea în felul următor: toate elementele liniilor care conţin valoarea maximă vor fi mărite cu valoarea minimă din matrice. Scrieţi în fişierul date.out matricea astfel obţinută.
  987.  
  988.  
  989. Ex:
  990. date.in date.out
  991. 4
  992. 2 5 3 2
  993. 2 2 4 4
  994. 3 2 2 2
  995. 5 3 5 2
  996.  
  997. 4 7 5 4
  998. 2 2 4 4
  999. 3 2 2 2
  1000. 7 5 7 4
  1001.  
  1002.  
  1003.  
  1004. Barem de corectare
  1005.  
  1006. • declarări corecte de date – 1 punct
  1007. • citirea corectă a datelor –1 punct
  1008. • determinarea corectă a valorii maxime – 2 puncte
  1009. • determinarea corectă a valorii minime – 1 punct
  1010. • identificarea liniilor ce trebuiesc modificate şi modificarea lor – 2 puncte
  1011. • scrierea rezultatelor cerute – 1 puncte
  1012. • corectitudinea sintactică a programului – 1 punct
  1013.  
  1014. Notă: Se acordă 1 punct din oficiu.
  1015.  
  1016. #include <fstream>
  1017. using namespace std;
  1018. ifstream fin("date.in");
  1019. ofstream fout("date.out");
  1020. int n,i,j,minim,maxim,ok,a[100][100];
  1021. int main()
  1022. {
  1023. fin>>n;
  1024. for(i=1;i<=n;i++)
  1025. for(j=1;j<=n;j++)
  1026. fin>>a[i][j];
  1027. minim=a[1][1];
  1028. maxim=a[1][1];
  1029. for(i=1;i<=n;i++)
  1030. for(j=1;j<=n;j++)
  1031. {
  1032. if(a[i][j]<minim)
  1033. minim=a[i][j];
  1034. if(a[i][j]>maxim)
  1035. maxim=a[i][j];
  1036. }
  1037. for(i=1;i<=n;i++)
  1038. {
  1039. ok=0;
  1040. for(j=1;j<=n;j++)
  1041. if(a[i][j]==maxim)
  1042. ok=1;
  1043. for(j=1;j<=n && ok==1;j++)
  1044. a[i][j]=a[i][j]+minim;
  1045. }
  1046. for(i=1;i<=n;i++)
  1047. {
  1048. for(j=1;j<=n;j++)
  1049. fout<<a[i][j]<<" ";
  1050. fout<<'\n';
  1051. }
  1052. fin.close();
  1053. fout.close();
  1054. return 0;
  1055. }
  1056.  
  1057.  
  1058.  
  1059.  
  1060. Biletul nr. 20
  1061.  
  1062.  
  1063. Se citesc din fişierul numere.in două numere naturale a şi b cu cel mult 9 cifre fiecare. Se cere să se scrie în fişierul numere.out cel mai mic numărul natural care se poate forma cu toate cifrele celor două numere.
  1064.  
  1065.  
  1066. Ex:
  1067. numere.in numere.out
  1068. 36321
  1069. 4173 112333467
  1070.  
  1071.  
  1072.  
  1073.  
  1074. Barem de corectare
  1075.  
  1076. • declarări corecte de date – 1 punct
  1077. • citirea corectă a datelor – 1 punct
  1078. • determinarea corectă a cifrelor numerelor – 2 puncte
  1079. • determinarea numărului minim cu toate cifrele celor doua numere – 3 puncte
  1080. • scrierea rezultatelor cerute – 1 punct
  1081. • corectitudinea sintactică a programului – 1 punct
  1082.  
  1083. Notă: Se acordă 1 punct din oficiu.
  1084.  
  1085. #include <fstream>
  1086. using namespace std;
  1087. ifstream fin("numere.in");
  1088. ofstream fout("numere.out");
  1089. int a,b,i,k,fr[10];
  1090. int main()
  1091. {
  1092. fin>>a>>b;
  1093. while(a>0)
  1094. {
  1095. fr[a%10]++;
  1096. a=a/10;
  1097. }
  1098. while(b>0)
  1099. {
  1100. fr[b%10]++;
  1101. b=b/10;
  1102. }
  1103. for(i=0;i<=9;i++)
  1104. if(fr[i]>0)
  1105. for(k=1;k<=fr[i];k++)
  1106. fout<<i;
  1107. fin.close();
  1108. fout.close();
  1109. return 0;
  1110. }
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116. Biletul nr. 21
  1117.  
  1118.  
  1119. Din fişierul text doc.txt se citeşte un text care conţine informaţii despre mai multe persoane, sub o formă nestructurată. Informaţiile sunt dispuse pe linii de maxim 200 de caracte şi pot conţine CNP-uri valide. Ştiid că CNP-ul unei persoane este un şir de 13 cifre consecutive, să se scrie în fişierul text cnp.txt, pe linii distincte, toate CNP-urile extrase din text. Dacă nu există nici un astfel de şir, se va scrie în fişier valoarea 0.
  1120.  
  1121. Ex:
  1122. doc.txt cnp.txt
  1123. Popesu Grigore, 14 ani, 1991212122334; Gigel Banu – 1031102453435, Bujorului 7; Dana Marin: 2690405358687, fara viza, 2450609987654 - Jane Doe 1991212122334
  1124. 1031102453435
  1125. 2690405358687
  1126. 2450609987654
  1127. doc.txt cnp.txt
  1128. Popesu Grigore, 14 ani, 1991212134; Gigel Banu – 103110245Bujorului 7; Dana Marin: 269-04-05-358687, fara viza, 2+450609+987654 - Jane Doe 0
  1129.  
  1130.  
  1131.  
  1132. Barem de corectare
  1133.  
  1134. • declarări corecte de date – 1 punct
  1135. • citirea corectă a datelor –1 punct
  1136. • identificarea corectă a unui CNP în şir – 2 puncte
  1137. • determinarea corectă a situaţiei în care nu există CNP valid – 1 punct
  1138. • algoritm de rezolvare corect – 2 puncte
  1139. • afişare corectă a datelor – 1punct
  1140. • corectitudinea sintactică a programului – 1punct
  1141.  
  1142. Notă: Se acordă 1 punct din oficiu.
  1143.  
  1144. #include <iostream>
  1145. #include <fstream>
  1146. #include <cstring>
  1147. using namespace std;
  1148. ifstream fin("doc.txt");
  1149. ofstream fout("cnp.txt");
  1150. char s[201],*p;
  1151. int n;
  1152. int main()
  1153. {
  1154. while(fin>>s)
  1155. {
  1156. n=strlen(s);
  1157. p=strtok(s," ,.:;-");
  1158. while (p!=0)
  1159. {
  1160. if(strlen(p)==13 && p[0]>='0' && p[0]<='9')
  1161. cout<<p<<'\n';
  1162. p=strtok(0," ,.:;-");
  1163. }
  1164. }
  1165. fin.close();
  1166. return 0;
  1167. }
  1168.  
  1169.  
  1170.  
  1171.  
  1172. Biletul nr. 22
  1173.  
  1174. Se citesc din fişierul text numere.in, din prima linie n, numărul de numere apoi din următoarea linie n numere naturale din intervalul [10, 109], separate prin câte un spaţiu. Să se afişeze pe ecran, dacă există, numerele rotunde, câte două pe o linie, separate prin spaţii. Dacă nu există astfel de numere se va afişa 0.
  1175. Spunem că un număr x este rotund dacă există un număr natural nenul k, mai mic strict decât numărul de cifre al lui x, astfel încât prin permutarea circulară a cifrelor numărului cu k poziţii la dreapta, să se obţină numărul iniţial.
  1176.  
  1177. Ex:
  1178. numere.in Ecran
  1179. 5
  1180. 12 3232 123 144144 77 2323 144144
  1181. 77
  1182. numere.in Ecran
  1183. 3
  1184. 11211 45678 232 0
  1185.  
  1186. Barem de corectare
  1187.  
  1188. • declarări corecte de date – 1 punct
  1189. • citirea corectă a datelor –1 punct
  1190. • construirea corectă a unui nou număr prin permutarea circulară a cifrelor – 2 puncte
  1191. • verificarea situaţiei când k>numărul de cifre ale lui n – 1 punct
  1192. • algoritm de rezolvare corect – 2 puncte
  1193. • afişare corectă a datelor – 1punct
  1194. • corectitudinea sintactică a programului – 1punct
  1195.  
  1196. Notă: Se acordă 1 punct din oficiu.
  1197.  
  1198. #include <iostream>
  1199. #include <fstream>
  1200. #include <cmath>
  1201. using namespace std;
  1202. ifstream fin("numere.in");
  1203. int n,i,j;
  1204. long x;
  1205. int rotund(long x)
  1206. {
  1207. int c;
  1208. long a=x, p;
  1209. c=(int)(log10(x))+1;
  1210. p=pow(10,c-1);
  1211. for(int i=1; i<c; i++)
  1212. {
  1213. a=a%10*p+a/10;
  1214. if(a==x)
  1215. return 1;
  1216. }
  1217. return 0;
  1218. }
  1219. int main()
  1220. {
  1221. fin>>n;
  1222. j=0;
  1223. for (i=1; i<=n; i++)
  1224. {
  1225. fin>>x;
  1226. if (rotund(x)!=0)
  1227. {
  1228. cout<<x<<' ';
  1229. j++;
  1230. if(j%2==0)
  1231. cout<<'\n';
  1232. }
  1233. }
  1234. if(j==0)
  1235. cout<<'0';
  1236. fin.close();
  1237. return 0;
  1238. }
  1239.  
  1240.  
  1241.  
  1242.  
  1243. Biletul nr. 23
  1244.  
  1245.  
  1246. Pentru numerotarea paginilor unei serii eciclopedice, formate din unul sau mai multe volume, se presupune ca se folosesc n cifre. Fiecare volum are 300 de pagini, cu excepţia eventual a celui din urmă care ar putea avea mai puţine. Numerotarea paginilor incepe cu 1 în fiecare volum. Se citeşte de la tastatură n, numărul de cifre (1<n<100000000). Dacă este posibil, să se determine şi să scrie în fişierul text pag.txt, pe linii distincte, numărul de volume din serie şi numărul de pagini ale ultimului volum. Dacă nu este posibil se va scrie mesajul IMPOSIBIL.
  1247.  
  1248. Ex:
  1249. tastatură pag.txt
  1250. 999 2
  1251. 105
  1252. tastatură pag.txt
  1253. 900 IMPOSIBIL
  1254.  
  1255.  
  1256. Barem de corectare
  1257.  
  1258. • declarări corecte de date – 1 punct
  1259. • citirea corectă a datelor –1 punct
  1260. • determinarea numărului de cifre folosite în numerotarea unui volum – 1 punct
  1261. • determinarea corectă a tututror situaţiilor în care este imposibilă numerotarea – 2 punct
  1262. • algoritm de rezolvare corect – 2 puncte
  1263. • afişare corectă a datelor – 1punct
  1264. • corectitudinea sintactică a programului – 1punct
  1265.  
  1266. Notă: Se acordă 1 punct din oficiu.
  1267.  
  1268. #include <iostream>
  1269. #include <fstream>
  1270. using namespace std;
  1271. ofstream fout("pag.txt");
  1272. int n,nrv,nrp,ok;
  1273. int main()
  1274. {
  1275. cin>>n;
  1276. nrv=0;
  1277. while(n>=792)
  1278. {
  1279. nrv++;
  1280. n=n-792;
  1281. }
  1282. nrv++;
  1283. ok=1;
  1284. if(n<=9)
  1285. nrp=n;
  1286. else if(n<=189)
  1287. {
  1288. if((n-9)%2==0)
  1289. nrp=9+(n-9)/2;
  1290. else ok=0;
  1291. }
  1292. else if(n<=792)
  1293. {
  1294. if((n-189)%3==0)
  1295. nrp=99+(n-189)/3;
  1296. else ok=0;
  1297. }
  1298. if(ok==1)
  1299. fout<<nrv<<'\n'<<nrp;
  1300. else fout<<"Imposibil";
  1301. fout.close();
  1302. return 0;
  1303. }
  1304.  
  1305.  
  1306.  
  1307.  
  1308. Biletul nr. 24
  1309.  
  1310.  
  1311. Pentru cadourile pe care Moş Crăciun urmează să le cumpere copiilor cuminţi, Consiliul Polului Nord a alocat suma de S eureni (1<S<200000000). Ştiind că în comerţul polar se utilizează n tipuri de bancnote (1<n<10) de valori 1, e1, e2, e3,..., en (e=valoarea de bază a euren, număr natural de cel mult 3 cifre, dat) şi faptul că Moşul trebuie să primească un număr minim de bancnote pentru suma aprobată, să se determine numărul de bancnote din fiecare tip utilizat în plata sumei şi numărul total de bancnote care i s-au alocat.
  1312. Din fişierul text eur.in, de pe prima linie, separate prin câte un spaţiu, se citesc, S, n, e. În fişierul text eur.out se vor scrie, pe linii diferite, numărul de bancnote (nenul) care vor fi utilizate din fiecare tip (ca în exemplu), iar pe ultima linie, numărul total de bancnote cu care se va plăti suma.
  1313.  
  1314. Ex:
  1315. eur.in eur.out
  1316. 107 4 5 4 bancnote cu valoarea 25
  1317. 1 bancnote cu valoarea 5
  1318. 2 bancnote cu valoarea 1
  1319. 7
  1320.  
  1321.  
  1322.  
  1323. Barem de corectare
  1324.  
  1325. • declarări corecte de date – 1 punct
  1326. • citirea corectă a datelor –1 punct
  1327. • calcularea corectă a valorii maxime ek ≤ S , 1≤k≤n – 1 punct
  1328. • calcularea corectă a numărului de bancnote din fiecare tip ce intră în plata sumei – 1 punct
  1329. • calcularea corectă a numărului de total de bancnote ce intră în plata sumei – 2 punct
  1330. • algoritm de rezolvare corect – 1 puncte
  1331. • afişare corectă a datelor – 1punct
  1332. • corectitudinea sintactică a programului – 1punct
  1333.  
  1334. Notă: Se acordă 1 punct din oficiu.
  1335.  
  1336. #include <fstream>
  1337. using namespace std;
  1338. ifstream fin("eur.in");
  1339. ofstream fout("eur.out");
  1340. int n,e,nr,i;
  1341. long s,p;
  1342. int main()
  1343. {
  1344. fin>>s>>n>>e;
  1345. nr=0;p=1;
  1346. for(i=1;i<=n;i++)
  1347. p=p*e;
  1348. while(s>0)
  1349. {
  1350. if(s/p!=0)
  1351. {
  1352. fout<<s/p<<" bancnote de valoare "<<p<<'\n';
  1353. nr=nr+s/p;
  1354. }
  1355. s=s%p;
  1356. p=p/e;
  1357. }
  1358. fout<<nr;
  1359. fin.close();
  1360. fout.close();
  1361. return 0;
  1362. }
  1363.  
  1364.  
  1365.  
  1366.  
  1367. Biletul nr. 25
  1368.  
  1369.  
  1370. În fişierul text numere.in sunt cel mult 9998 de numere naturale nenule, distincte. Scrieţi un program C/C++ eficient din punct de vedere al timpului de execuţie, care să scrie în fişierul numere.out, pe o linie, în ordine descrescătoare, separate prin câte un spaţiu, numerele naturale nunule, de cel mult 4 cifre, care nu apar în fişierul numere.in.
  1371.  
  1372. Ex:
  1373. numere.in numere.out
  1374. 107 4 5 8 1 6 9 9999 9998 ... 108 106 105 ... 10 7 6 3 2
  1375.  
  1376.  
  1377.  
  1378. Barem de corectare
  1379.  
  1380. • declarări corecte de date – 1 punct
  1381. • citirea corectă a datelor – 1 punct
  1382. • determinarea corectă a numerelor care nu apar în fişier – 1 punct
  1383. • algoritm de rezolvare corect şi eficient – 3 puncte
  1384. • afişare corectă, în ordine descrescătoare, a datelor – 2 punct
  1385. • corectitudinea sintactică a programului – 1punct
  1386.  
  1387. Notă: Se acordă 1 punct din oficiu.
  1388.  
  1389. #include <fstream>
  1390. using namespace std;
  1391. ifstream fin("numere.in");
  1392. ofstream fout("numere.out");
  1393. int n,i,fr[9999];
  1394. int main()
  1395. {
  1396. while(fin>>n)
  1397. fr[n]++;
  1398. for(i=9999;i>=1;i--)
  1399. if(fr[i]==0)
  1400. fout<<i<<" ";
  1401. fin.close();
  1402. fout.close();
  1403. return 0;
  1404. }
  1405.  
  1406.  
  1407.  
  1408.  
  1409. Biletul nr. 26
  1410.  
  1411.  
  1412. Scrieţi un program C/C++ eficient din punct de vedere al timpului de execuţie, care generează şi scrie în fişierul text munte.txt, pe prima linie, separate prin câte un spaţiu, toate palindroamele-munte de nouă cifre (un palindrom de are aspect de munte daca cifrele sale sunt strict crescătoare până la jumătatea numărului. EX. 123454321).
  1413. Pe a doua linie în fişier se va scrie numărul de palindroame-munte generate.
  1414.  
  1415.  
  1416. Barem de corectare
  1417.  
  1418. • declarări corecte de date – 1 punct
  1419. • generarea unui palindrom-munte corect – 2 puncte
  1420. • calculatrea corectă a numărului total de palindroame-munte – 1 punct
  1421. • algoritm de rezolvare corect şi eficient – 3 puncte
  1422. • afişare corectă a datelor – 1 puncte
  1423. • corectitudinea sintactică a programului – 1punct
  1424.  
  1425. Notă: Se acordă 1 punct din oficiu.
  1426.  
  1427. //algoritm backtracking de combinari
  1428. #include <iostream>
  1429. #include <fstream>
  1430. using namespace std;
  1431. ofstream fout("munte.txt");
  1432.  
  1433. int n,p,v[100],nr=0;
  1434.  
  1435. int solutie(int k)
  1436. {
  1437. if(k==5) return 1;
  1438. return 0;
  1439. }
  1440.  
  1441. void afisare(int k)
  1442. {
  1443. int i;
  1444. for(i=1;i<=k;i++)
  1445. fout<<v[i];
  1446. for(i=k-1;i>=1;i--)
  1447. fout<<v[i];
  1448. fout<<' ';
  1449. }
  1450.  
  1451. void BK(int k, int &nr)
  1452. {
  1453. int i;
  1454. for(i=v[k-1]+1;i<=9;i++) //la pasul k selectăm din mulţime un element mai mare decât elementul
  1455. {
  1456. v[k]=i; //de pe poziţia k-1
  1457. if(solutie(k)) //nu este necesar să verificam condiţiile de continuare, ele sunt respectate
  1458. {
  1459. afisare(k); //datorită modului în care am selectat elementele.
  1460. nr++;
  1461. }
  1462. else BK(k+1, nr);
  1463. }
  1464. }
  1465. int main()
  1466. {
  1467. BK(1,nr);
  1468. fout<<'\n'<<nr;
  1469. return 0;
  1470. }
  1471.  
  1472.  
  1473.  
  1474.  
  1475. Biletul nr. 27
  1476.  
  1477.  
  1478. Din fişierul text mat.in se citesc doua numere naturale n, m (1<n<30, 1<m<30 ) apoi elementele întregi ale unei matrici de dimensiune n*m. Scrieţi un program C/C++ care modifică matricea astfel: toate elementele egale cu valoarea maximă din matrice se înlocuiesc cu valoarea minimă de pe coloana lor. Dacă s-a făcut măcar o înlocuire, matricea rezultată se va scrie în fişierul text mat.out, altfel matricea nu se va scrie în fişierul de ieşire. Pe ultima linie în fişierul de ieşire se va scrie numărul de substituţii efectuate.
  1479.  
  1480. Ex:
  1481. mat.in mat.out
  1482. 3 5
  1483. 2 6 7 3
  1484. 7 1 7 1
  1485. 5 3 1 2 2 6 1 3
  1486. 2 1 1 1
  1487. 5 3 1 2
  1488. 3
  1489.  
  1490.  
  1491.  
  1492. Barem de corectare
  1493.  
  1494. • declarări corecte de date – 1 punct
  1495. • citirea corectă a datelor –1 punct
  1496. • identificarea corectă a valorii maxime din matrice – 1 punct
  1497. • identificarea corectă a valorii minime de pe o coloană dată din matrice – 1 punct
  1498. • determinarea corectă a situaţiei în care nu se realizează înlocuiri – 1 punct
  1499. • algoritm de rezolvare corect – 2 puncte
  1500. • afişare corectă a datelor – 1punct
  1501. • corectitudinea sintactică a programului – 1punct
  1502.  
  1503. Notă: Se acordă 1 punct din oficiu.
  1504.  
  1505. #include <fstream>
  1506. using namespace std;
  1507. ifstream fin("mat.in");
  1508. ofstream fout("mat.out");
  1509. int n,m,i,j,minim,maxim,nr,a[100][100];
  1510. int main()
  1511. {
  1512. fin>>n>>m;
  1513. for(i=1;i<=n;i++)
  1514. for(j=1;j<=m;j++)
  1515. fin>>a[i][j];
  1516. maxim=a[1][1];
  1517. for(i=1;i<=n;i++)
  1518. for(j=1;j<=m;j++)
  1519. if(a[i][j]>maxim)
  1520. maxim=a[i][j];
  1521. nr=0;
  1522. for(j=1;j<=m;j++)
  1523. {
  1524. minim=a[1][j];
  1525. for(i=2;i<=n;i++)
  1526. if(a[i][j]<minim)
  1527. minim=a[i][j];
  1528. for(i=1;i<=n;i++)
  1529. if(a[i][j]==maxim)
  1530. {
  1531. a[i][j]=minim;
  1532. nr++;
  1533. }
  1534. }
  1535. for(i=1;i<=n;i++)
  1536. {
  1537. for(j=1;j<=m;j++)
  1538. fout<<a[i][j]<<" ";
  1539. fout<<'\n';
  1540. }
  1541. fout<<nr;
  1542. fin.close();
  1543. fout.close();
  1544. return 0;
  1545. }
  1546.  
  1547.  
  1548.  
  1549.  
  1550. Biletul nr. 28
  1551.  
  1552.  
  1553. Se citesc din fişierul text numere.in, din prima linie n, un număr natural nenul, pătrat perfect, n<10000, apoi, din linia următoare, separate prin câte un spaţiu, n numere întregi de cel mul 4 cifre. Să se construiască în memorie o matrice pătratică cu toate elementele din fişierul de intrare, în spirală, în sens invers acelor de ceas astfel: pe prima coloană, începând cu linia 1, se vor trece primele elemente din şir (de sus în jos), apoi pe ultima linie, începând de la prima coloană până la ultima (de la stânga la dreapta), apoi pe ultima coloană, de la ultima linie la prima (de jos în sus), apoi pe prima linie, de la ultima coloană la prima (de la dreapta la stânga) şamd. Matricea construită astfel se va scrie în fişierul numere.out.
  1554.  
  1555.  
  1556. Ex:
  1557. numere.in numere.out
  1558. 9
  1559. 2 6 7 3 7 1 7 1 5 2 1 7
  1560. 6 5 1
  1561. 7 3 7
  1562.  
  1563.  
  1564.  
  1565. Barem de corectare
  1566.  
  1567. • declarări corecte de date – 1 punct
  1568. • citirea corectă a datelor –1 punct
  1569. • determinarea corectă a dimensiunii matricii, dacă e posibil – 1 punct
  1570. • construirea corectă a unei “spire” – 2 puncte
  1571. • algoritm de rezolvare corect – 2 puncte
  1572. • afişare corectă a datelor – 1punct
  1573. • corectitudinea sintactică a programului – 1punct
  1574.  
  1575. Notă: Se acordă 1 punct din oficiu.
  1576.  
  1577. #include<fstream>
  1578. #include<cmath>
  1579. using namespace std;
  1580. ifstream fin ("numere.in");
  1581. ofstream fout("numere.out");
  1582. int a[100][100],x,l,c,n,m,i,j;
  1583. int main()
  1584. {
  1585. fin>>n; m=sqrt(n);
  1586. for (i=1; i<=m/2; i++)
  1587. {
  1588. for (j=i; j<m-i+1; j++) fin>>a[j][i];
  1589. for (j=i; j<m-i+1; j++) fin>>a[m-i+1][j];
  1590. for (j=m-i+1; j>i; j--) fin>>a[j][m-i+1];
  1591. for (j=m-i+1; j>i; j--) fin>>a[i][j];
  1592. }
  1593. if(m%2) fin>>a[m/2+1][m/2+1];
  1594. for (i=1; i<=m; i++)
  1595. {
  1596. for (j=1; j<=m; j++)
  1597. fout<<a[i][j]<<' ';
  1598. fout<<'\n';
  1599. }
  1600. fin.close();
  1601. fout.close();
  1602. return 0;
  1603. }
  1604.  
  1605.  
  1606.  
  1607.  
  1608. Biletul nr. 29
  1609.  
  1610.  
  1611. Din fişierul text date.in se citeşte un text format din cuvinte separate prin spaţii sau caractere de forma .,;:-?!. Lungimea unei linii din fişier nu depăşeşte 255 caractere. Să se scrie în fişierul text date.out, pe linii diferite, cuvintele distincte din text care conţin subşirul ‘ate’, fără a face distincţie între litere mari şi mici.
  1612.  
  1613. Ex:
  1614. date.in date.out
  1615. Daca satelitii nu sunt activi, GPS-ul nu functioneaza...
  1616. - Ai vazut cate cuvinte marcate sunt?? Poate esti si tu atent! Cate sunt? satelitii cate marcate
  1617. Poate atent
  1618.  
  1619.  
  1620.  
  1621.  
  1622. Barem de corectare
  1623.  
  1624. • declarări corecte de date – 1 punct
  1625. • citirea corectă a datelor –1 punct
  1626. • identificarea corectă a unui cuvânt din şir – 1 puncte
  1627. • determinarea corectă a unui cuvânt care conţine subşirul ‘ate’ – 1 punct
  1628. • algoritm de rezolvare corect – 2 puncte
  1629. • afişare corectă, doar a cuvintelor distincte – 2 puncte
  1630. • corectitudinea sintactică a programului – 1punct
  1631.  
  1632. Notă: Se acordă 1 punct din oficiu.
  1633.  
  1634. #include<fstream>
  1635. #include<cstring>
  1636. using namespace std;
  1637. ifstream fin ("date.in");
  1638. ofstream fout("date.out");
  1639. char s[256],*p,sep[]=" .,;:-!?",c[256],a[100][20];
  1640. int n,i;
  1641.  
  1642. int cauta(char a[100][20],int n,char *c)
  1643. {
  1644. for(int i=0;i<n;i++)
  1645. if(stricmp(a[i],c)==0)
  1646. return 1;
  1647. return 0;
  1648. }
  1649.  
  1650. int main()
  1651. {
  1652. while(!fin.eof())
  1653. {
  1654. fin.getline(s,255);
  1655. p=strtok(s,sep);
  1656. while(p)
  1657. {
  1658. if(strstr(p,"ate"))
  1659. if(cauta(a,n,p)==0)
  1660. strcpy(a[n++],p);
  1661. p=strtok(NULL,sep);
  1662. }
  1663. }
  1664. for(i=0;i<n;i++)
  1665. fout<<a[i]<<'\n';
  1666. fin.close();
  1667. fout.close();
  1668. return 0;
  1669. }
  1670.  
  1671.  
  1672.  
  1673.  
  1674. Biletul nr. 30
  1675.  
  1676. Scrieţi un program Pascal/C/C++ care rezolvă în mulţimea Z*Z ecuaţia x2=n+ y2, unde n este un număr natural nenul, dat de la tastatură (1<n<1000). Soluţiile distincte, de forma x y, se vor scrie pe ecran, câte o soluţie pe o linie.
  1677.  
  1678. Ex:
  1679. Tastatura date.out
  1680. 15 8 7
  1681. 8 -7
  1682. -8 7
  1683. -8 -7
  1684. 4 1
  1685. 4 -1
  1686. -4 1
  1687. -4 -1
  1688.  
  1689.  
  1690. Barem de corectare
  1691.  
  1692. • declarări corecte de date – 1 punct
  1693. • citirea corectă a datelor –1 punct
  1694. • identificarea divizorilor lui n, mai mici decât n – 1 punct
  1695. • determinarea corectă valorilor naturale x şi y în funcţie de divizori – 2 punct
  1696. • algoritm de rezolvare corect – 2 puncte
  1697. • afişare corectă a datelor – 1punct
  1698. • corectitudinea sintactică a programului – 1punct
  1699.  
  1700. Notă: Se acordă 1 punct din oficiu.
  1701.  
  1702. #include <fstream>
  1703. #include <iostream>
  1704. #include <cmath>
  1705. using namespace std;
  1706. ofstream fout("date.out");
  1707. int r,x,y,n,d,k;
  1708. int main()
  1709. {
  1710. cin>>n;
  1711. r=sqrt(n);
  1712. for(d=1;d<=r;d++)
  1713. if(n%d==0)
  1714. {
  1715. k=n/d;
  1716. if(n%d==n%k)
  1717. {
  1718. x=(d+k)/2; y=(d-k)/2;
  1719. fout<<x<<' '<<y<<'\n';
  1720. fout<<x<<' '<<-y<<'\n';
  1721. fout<<-x<<' '<<y<<'\n';
  1722. fout<<-x<<' '<<-y<<'\n';
  1723. }
  1724. }
  1725. fout.close();
  1726. return 0;
  1727. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement