Sunteți pe pagina 1din 16

PROBLEMA 1

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citeste un cuvant format din litere mici. Sa se afiseze cuvintele
care
5. se obtin prin eliminarea succesiva a primei si ultimei litere din
cuvantul citit.
6. Ex: Daca de citeste cuvantul alina se vor afisa:
7. alina
8. lin
9. i*/
10. int main()
11. {
12. char s[21];
13. cin.getline(s,21);
14. while (strlen(s)>0)
15. {
16. strcpy(s,s+1);
17. strcpy(s+strlen(s)-1,s+strlen(s));
18. cout<<s<<endl;
19. }
20. return 0;
21. }

PROBLEMA 2

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citeste un cuvant format doar din litere mici. Sa se permute
circular
5. spre stanga literele din el si sa se afiseze cuvantul astfel obtinut.
6. Ex. Alina => linaA*/
7. int main()
8. {
9. char s[100],aux;
10. cin.getline(s,100);
11. aux=s[0];
12. for(int i=0; i<strlen(s); i++)
13. {
14. s[i]=s[i+1];
15. }
16. s[strlen(s)-1]=aux;
17. cout<<s;
18. return 0;
19. }
PROBLEMA 3

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citeste un cuvant format din litere mici. Sa se afiseze cuvintele
care
5. se obtin prin eliminarea succesiva a literei sau a celor 2 litere din
mijlocul cuvantului citit.
6. Ex: Daca de citeste cuvantul cosmina se vor afisa:
7. cosina
8. cona
9. ca*/
10. int main()
11. {
12. char s[31]; int i=0;
13. cin.getline(s,31);
14. if(strlen(s)%2==1)
15. { strcpy(s+strlen(s)/2, s+strlen(s)/2+1);
16. cout<<s<<endl;
17. }
18. while(strlen(s)!=0)
19. { strcpy(s+strlen(s)/2-1, s+strlen(s)/2+1);
20. cout<<s<<endl;
21. }
22. return 0;
23. }

PROBLEMA 4

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citeste un cuvant format din numar par de litere. Sa se
interschimbe litera
5. de pe prima pozitie cu cea de pe a doua, a treia cu a patra, etc.
6. Ex. cosmin => ocmsni*/
7. int main()
8. {
9. char s[30],aux;
10. int i;
11. cin.getline(s,30);
12. for(i=0;i<strlen(s)-1;i=i+2)
13. { aux=s[i];
14. s[i]=s[i+1];
15. s[i+1]=aux;
16. }
17. cout<<s;
18. return 0;
19. }

PROBLEMA 5

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citeste un cuvant s. Sa se afiseze toate sufixele lui s in ordinea
crescatoare a lungimii.
5. Ex: s=alina , se vor afisa:
6. a
7. na
8. ina
9. lina
10. alina*/
11. int main()
12. {
13. char s[51];
14. int i;
15. cin.getline(s,51);
16. for(i=strlen(s)-1;i>=0;i--)
17. cout<<s+i<<endl;
18. return 0;
19. }

PROBLEMA 6

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Sa se scrie un program C/C++ care citeste de la tastatura un cuvant
format din
5. cel mult 20 de caractere, doar litere mici ale alfabetului englez.
Programul determina
6. transformarea cuvantului citit prin Inlocuirea fiecarei vocale a
cuvantului, cu un sir
7. format din doua caractere si anume vocala respectiva urmata de litera
mare corespunzatoare,
8. restul literelor nemodificandu-se, ca in exemplu. Programul afiseaza pe
ecran cuvantul obtinut,
9. pe o singura linie. Se considera vocale literele din multimea
{a,e,i,o,u}.
10. Exemplu: pentru cuvantul bacalaureat se va afisa pe ecran:
baAcaAlaAuUreEaAt*/
11. int main()
12. {
13.  
14. char s[41];
15. cin.getline(s,41);
16. char v[]="aeiou";
17. for(int i=0;i<strlen(s);i++)
18. if(strchr(v,s[i])!=0) //e vocala mica
19. { char *aux;
20. strcpy(aux,s+i);
21. strcpy(s+i+1,aux); //dubleaza vocala mica
22. s[i+1]=s[i+1]-32; //transforma dublura in mare
23. }
24. cout<<s;
25. return 0;
26. }

PROBLEMA 7

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citeste un numar natural n si apoi n cuvinte formate din cel mult
20 de litere fiecare.
5. Sa se afiseze cel mai lung cuvant care se poate forma cu doua cuvinte
dintre cele citite.
6. Exemplu:
7. 6
8. arici
9. iepure
10. cal
11. hipopotam
12. oaie
13. pastrav
14. Cel mai lung cuvant poate fi hipopotampastrav sau pastravhipopotam*/
15. int main()
16. {
17. int n;
18. char s[21],m1[21]="",m2[21]="";
19. cin>>n;
20. for(int i=1; i<=n; i++)
21. {
22. cin>>s;
23. if(strlen(s)>strlen(m1))
24. {
25. strcpy(m2,m1);
26. strcpy(m1,s);
27. }
28. else if(strlen(s)>strlen(m2))
29. strcpy(m2,s);
30. }
31. cout<<m1<<m2;
32. return 0;
33. }

PROBLEMA 8

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citeste un numar natural n si apoi n cuvinte formate din cel mult
20 de litere fiecare.
5. Calculati si afisati cate dintre cele n-1 cuvinte citite incepand cu
cel de al doilea
6. au proprietatea ca primul cuvant citit le este sufix.
7. Exemplu: daca n=6, iar cuvintele citite sunt ion, revelion, ionel,
bulion, milion, pionul => 3
8. (3 cuvinte din ultimele 5 se termina cu sufixul ion).*/
9. int main()
10. {
11. char a[21], b[21];
12. int n,k=0;
13. cin>>n;
14. cin>>a;
15. for(int i=1;i<n;i++)
16. {
17. cin>>b;
18. if(strlen(b)>=strlen(a))
19. if(strcmp(a,b+strlen(b)-strlen(a))==0)
20. k++;
21. }
22. cout<<k;
23. return 0;}

PROBLEMA 9

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se dă un șir de caractere ce conține doar litere mici ale alfabetului
englez.
5. Să se afișez cel mai lung subșir care apare de cel puțin două în șirul
dat.
6. Intrare
7. cbddccdaaddccaaddbccbbdbddd
8. Ieșire
9. aadd
10. */
11. char s[256], c[130], r[129];
12. int n, nrap;
13. int main()
14. {
15. cin.getline(s, 256);
16. n = strlen(s)/2;
17. for(int i = 2; i <= n; i++)
18. {
19. for(int j = 0; s[j] != '\0'; j++)
20. {
21. strcpy(c,"");
22. strncpy(c, s+j, i);
23. c[i] = '\0';
24. nrap = 0;
25. char* p = strstr(s+j, c);
26. while(p && nrap < 2)
27. {
28. nrap++;
29. if(nrap > 1)
30. {
31. if(strlen(c)>strlen(r))strncpy(r, c, i);
32. else if(strlen(c) == strlen(r) && strcmp(r,
c)>0)strncpy(r, c, i);
33. }
34. p=strstr(p+i, c);
35. }
36. }
37. }
38. cout << r;
39. return 0;
40. }

PROBLEMA 10

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se dă un șir de caractere reprezentând o propoziție formată din
litere mici ale alfabetului englez și spații.
5. Intrare
6. aceasta familie are doua case
7. Ieșire
8. 4
9. */
10. int main()
11. {
12. char ch[257];
13. cin.getline(ch , 256);
14. int i = 0;
15. int cnt=0;
16. while(ch[i]!='\0')
17. {
18. if((ch[i]=='a' || ch[i]=='e' || ch[i]=='i' || ch[i]=='o' ||
ch[i]=='u') && (ch[i+1]=='a' || ch[i+1]=='e' || ch[i+1]=='i' ||
ch[i+1]=='o' || ch[i+1]=='u'))
19. cnt++;
20. i++;
21. }
22. cout << cnt;
23. return 0;
24. }

PROBLEMA 11

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se dau două cuvinte a şi b şi o propoziţie s formată numai din litere
mici ale alfabetului englez şi spaţii.
5. Intrare
6. dar insa
7. dar nu trebuie dar e mai bine astfel
8. Iesire
9. insa nu trebuie insa e mai bine astfel
10. */
11. int main()
12. {
13. char a[100] , b[100];
14. cin >> a >> b;
15. char ch[100];
16. while(cin >> ch)
17. {
18. int i = 0;
19. bool ok=true;
20. while(ch[i]!='\0')
21. {
22. if(ch[i]!=a[i])
23. ok=false;
24. i++;
25. }
26. if(ok)
27. cout << b << ' ';
28. else
29. cout << ch << ' ';
30. }
31. return 0;
32. }

PROBLEMA 12

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se dau n șiruri de caractere care conțin cuvinte formate doar din
litere mici și mari ale alfabetului englez,
5. separate prin câte un singur spațiu.
6. Să se afișeze un nou șir format din primul cuvânt al fiecărui șir în
ordinea citirii,
7. al doilea cuvânt al fiecărui șir în ordinea citirii, etc. Dacă
șirurile nu au același număr de cuvinte,
8. se continuă acest proces, până când fiecare șir ajunge la final, tot
în ordinea citirii.
9.  
10. Intrare
11. 3
12. ana are mere
13. el are
14. ea are pere prune
15. Ieșire
16. ana el ea are are are mere pere prune
17. */
18. char m[11][1001];
19. int v[11];
20. int main()
21. {
22. int n , cnt=0;
23. cin >> n;
24. cin.getline(m[0] , 1001);
25. for(int i = 1 ; i <= n ; ++i)
26. cin.getline(m[i] , 1001);
27. for(int i = 1 ; i <= n ; ++i)
28. {
29. int j = 0;
30. while(m[i][j]!='\0')
31. {
32. if(m[i][j]==' ' && m[i][j+1]!=' ')
33. cnt++;
34. j++;
35. }
36. cnt++;
37. }
38. while(cnt)
39. for(int i = 1 ; i <= n; ++i)
40. {
41. bool ok=false;
42. while(m[i][v[i]]!=' ' && m[i][v[i]]!='\0')
43. cout << m[i][v[i]], v[i]++ , ok=true;
44. if(ok)
45. cout << ' ' , cnt--;
46. v[i]++;
47. }
48. return 0;
49. }

PROBLEMA 13

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se dă un şir de caractere ce conţine cuvinte formate din litere mici
5. ale alfabetului englez, separate prin unul sau mai multe spații.
6. Intrare
7. in vacanta plec la mare
8. Ieşire
9. in vacanta plec la mare
10. */
11. int main()
12. {
13. char ch[300];
14. cin.getline(ch , 300);
15. int i = 0;
16. while(ch[i]!='\0')
17. {
18. if((i==0 || ch[i-1]==' ') && ch[i]==' ')
19. {}
20. else
21. cout << ch[i];
22. i++;
23. }
24. return 0;
25. }

PROBLEMA 14

1. #include <fstream>
2. #include <cstring>
3. using namespace std;
4. ifstream fin("poezie.in");
5. ofstream fout("poezie.out");
6. /*In fisierul poezie.in se gaseste un text pe mai multe linii
reprezentand o poezie.
7. Textul contine litere mari si mici ale alfabetului englez, spatii,
newline si semne de punctuatie . , ! ?
8. In fisierul poezie.out se va afisa textul initial, din care vor fi
eliminate toate semnele de punctuatie,
9. mai putin cele aflate la capat de linie.
10. Numarul total de caractere din fisier este cel mult 5000.
11. Exemplu:
12. poezie.in
13. A fost!... odata!,
14. Ca, nicioada,,
15. O fata? frumoasa... de imparat!
16. poezie.out
17. A fost odata,
18. Ca nicioada,
19. O fata frumoasa de imparat!
20. */
21. int main()
22. {
23. char s[5001],sep[]=".,!?";
24. int lmax=0;
25. fin.get(s,5001,EOF);
26. for(int i=0;s[i];i++)
27. if(strchr(sep,s[i]) && s[i+1]!='\n')
28. {
29. char aux[5001];
30. strcpy(aux,s+i+1);
31. strcpy(s+i,aux);
32. i--;
33. }
34. fout<<s;
35. return 0;
36. }

PROBLEMA 15

1. #include <fstream>
2. #include <cstring>
3. using namespace std;
4. ifstream fin("text.in");
5. ofstream fout("text.out");
6. /*Din fisierul text.in se citeste un text aflat pe mai multe linii si
care este format din
7. litere ale alfabetului englez, caractere spatiu si NewLine.
8. In fisierul text.out se va afisa textul initial in care toate cuvintele
de lungime maxima vor
9. fi inlocuite cu inversul (oglinditul) lor. Restul cuvintelor si
arangarea lor pe linii vor ramane neschimbate.
10. Numarul total de caractere din fisier este cel mult 5000.
11. Exemplu:
12. text.in
13. Eu am gandit la fel ca tine
14. Dar am gresit codul
15. text.out
16. Eu am tidnag la fel ca tine
17. Dar am tiserg codul
18. */
19. int main()
20. {
21. char s[5001];
22. int lmax=0;
23. fin.get(s,5001,EOF); //citesc tot fisierul
24. //calculez lungimea maxima a unui cuvant
25. for(int i=0;s[i];i++)
26. if(s[i]!=' ' && s[i]!='\n')
27. {
28. int j=i;
29. while(s[j] && s[j]!=' ' && s[j]!='\n')
30. j++;
31. if(j-i>lmax) lmax=j-i;
32. }
33. //oglindesc cuvintele de lungime maxima
34. for(int i=0;s[i];i++)
35. if(s[i]!=' ' && s[i]!='\n')
36. {
37. int j=i;
38. while(s[j] && s[j]!=' ' && s[j]!='\n')
39. j++;
40. if(j-i==lmax)
41. {
42. for(int x=i,y=j-1;x<y;x++,y--)
43. swap(s[x],s[y]);
44. }
45. }
46. fout<<s;
47. return 0;
48. }

PROBLEMA 16

1. #include <fstream>
2. #include <cstring>
3. using namespace std;
4. ifstream fin("concatenari.in");
5. ofstream fout("concatenari.out");
6. /*Din fisierul concatenari.in se citeste un cuvant s avand maxim 10
litere. Apoi se citeste un numar natural
7. nenul n cu cel mult o cifra si apoi se citesc n cifre. Modificati sirul
s in functiile de numerele citite dupa n, astfel:
8. - daca numarul x citit este par, atunci la s se vor adauga primele x
litere in ordinea din sir
9. - daca numarul x citit este impar, atunci la s se vor adauga primele x
litere in ordinea inversa din sir.
10. Afisati in fisierul concatenari.out sirul obtinut din s la finalul
modificarilor.
11. Restrictie: Numere citire nu depasesc lungimea cuvantului s.
12. Exemplu:
13. concatenari.in
14. alina
15. 3
16. 4 3 2
17. concatenari.out
18. alinaalinilaal
19. Explicatie:
20. Se fac 3 concatenari. Prima data se adauga "alin", apoi "ila" si apoi
"al";
21. */
22. int main()
23. {
24. char s[101];
25. int n,x;
26. fin>>s;
27. fin>>n;
28. for(int i=1;i<=n;i++)
29. {
30. fin>>x;
31. if(x%2==0) strncat(s,s,x);
32. else
33. for(int j=x-1;j>=0;j--)
34. strncat(s,s+j,1);
35. }
36. fout<<s;
37. return 0;
38. }
39.  

PROBLEMA 17

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citeste un cuvant s format din cel mult 100 de litere mici. Se
citeste un numar natural p (p<=100).
5. Afisati cuvintele obtinute prin eliminarea unei secvente de p litere
din s.
6. Exemplu: s="adina", si p=3, rezulta cuvintele:
7. na aa ad
8. */
9. int main()
10. {
11. char s[101];
12. int p;
13. cin>>s>>p;
14. for(int i=0;i<=strlen(s)-p;i++)
15. {
16. char t[101], aux[101];
17. strcpy(t,s);
18. strcpy(aux,s+i+p);
19. strcpy(t+i,aux);
20. cout<<t<<" ";
21. }
22. return 0;
23. }

PROBLEMA 18

1. #include <fstream>
2. #include <cstring>
3. using namespace std;
4. ifstream fin("date.in");
5. ofstream fout("date.out");
6. /*Din fisierul text date.in se citeste un text format din cuvinte
separate prin spatii sau caractere de forma .,;:-?!.
7. Lungimea unei linii din fisier nu depaseste 255 caractere. Sa se scrie
in fisierul text date.out, pe linii diferite,
8. cuvintele distincte din text care contin subsirul "ate", fara a face
distinctie intre litere mari si mici.
9. Exemplu:
10. date.in
11. Daca satelitii nu sunt activi, GPS-ul nu functioneaza...
12. - Ai vazut cate cuvinte marcate sunt?? Poate esti si tu atent! Cate
sunt?
13. date.out
14. satelitii
15. cate
16. marcate
17. Poate
18. atent
19. */
20. int gasit(int n, char s[100][256], char c[256])
21. {
22. for(int i=1;i<=n;i++)
23. if(strcmpi(s[i],c)==0) return 1;
24. return 0;
25. }
26.  
27. int litera(char c)
28. {
29. return c>='a' && c<='z' || c>='A' && c<='Z';
30. }
31.  
32. int main()
33. {
34. char s[100][256];//memoreaza cuvintele distincte
35. char a[266];//citeste o linie din fisier
36. int n=0;//nr de cuvinte distincte
37. while(fin.getline(a,256))//cat timp pot citi un rand
38. {
39. char *p;
40. while(p=strstr(a,"ate"))//p indica unde il gaseste pe ate
41. {
42. int j=p-a;//pozitia unde e ate
43. while(j>0 && litera(a[j-1])) j--;//merg spre stanga in
cuvant
44. int k=p-a; //pozitia unde e ate
45. while(k<strlen(a) && litera(a[k+1])) k++;//merg spre
dreapta in cuvant
46. char cuv[256]="";
47. strncat(cuv,a+j,k-j+1);//copiez cuvantul in cuv
48. if(!gasit(n,s,cuv))//daca nu exista in cuvintele memorate
in s
49. strcpy(s[++n],cuv);//il daug
50. strcpy(a+j,a+k+1);//il sterg din linia citita
51. }
52. }
53. for(int i=1;i<=n;i++)
54. fout<<s[i]<<endl;
55. fin.close();
56. fout.close();
57. return 0;
58. }

PROBLEMA 19

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citesc doua cuvinte a si b formate din cel mult 20 de litere
fiecare. Afisati toate sufixele cuvantului
5. a care au proprietatea ca sunt prefixe ale cuvantului b. Daca nu
exista astfel de sufixe afisati mesajul "nu exista".
6. Exemplu: pentru cuvintele a="rebele" si b="elegant" sufixele cerute
sunt "ele" si "e" (nu neaparat in aceasta ordine).
7. */
8. int main()
9. {
10. char a[21], b[21];
11. int gasit=0;
12. cin>>a>>b;
13. for(int i=0;i<strlen(a);i++)
14. if(strstr(b,a+i)==b)
15. {
16. cout<<a+i<<" ";
17. gasit=1;
18. }
19. if(!gasit) cout<<"nu exista";
20. return 0;
21. }
22.  

PROBLEMA 20

1. #include <iostream>
2. #include <cstring>
3. using namespace std;
4. /*Se citesc 3 cuvinte s, a si b, s avand cel mult 50 de litere, iar a
si b avand acelasi cel mult
5. 10 litere fiecare. Inlocuiti in cuvantul s toate aparitiile lui a cu
b.
6. Exemplu:
7. s="abracadabra"
8. a="bra"
9. b="12345"
10. va rezulta s="a12345cada12345"
11. */
12. int main()
13. {
14. char s[101],a[11],b[11],*p,aux[101];
15. cin>>s>>a>>b;
16. while(p=strstr(s,a))
17. {
18. strcpy(aux,b);
19. strcat(aux,p+strlen(a));
20. strcpy(p,aux);
21. }
22. cout<<s;
23. return 0;
24. }

S-ar putea să vă placă și