Problemset (extra) - Laborator 3

  1. De la tastatură se citeşte o listă de numere pozitive. Pentru fiecare element citit se va afişa numărul prim cel mai apropiat de acesta. Dacă există două numere prime la fel de apropiate de elementul listei, se vor afişa amândouă. Dacă numărul este prim, nu se mai afişează nimic. Programul se încheie în momentul în care este citit un număr negativ. Se va defini funcția print_closest_prime(n);

Exemplu:

print_closest_prime(10); // printează pe ecran numărul 11
print_closest_prime(6);  // printează pe ecran 5 și 7
print_closest_prime(3);  // nu se afișează nimic
  1. Folosind declarații si definiri de variabile și funcții, creați două fișiere f1.c și f2.c, și apelați din funcția main din fișierul f1.c o funcție f definită în f2.c, iar în funcția f o variabilă g definită în fișierul f1.c. Compilați fișierele împreună și executați programul rezultat.

Exemplu:

gcc f1.c f2.c -o gigel
./gigel
  1. Scrieți o funcție care calculează cel mai mare divizor comun (greatest common divisor - gcd):

    • Prin împărțiri repetate
    • Prin scăderi repetate
  2. Scrieți o funcție care calculează cmmmc folosind funcția gcd (implementată anterior).

  3. Rezolvați problema fibonnaci pe Leetcode.

  4. Scrie o funcție recursivă care verifică că un număr e putere a lui 2.

    FOLLOW-UP: scrie o funcție recursivă care verifică că un număr e putere a lui 4.

  5. Rezolvați problema dibonnaci de pe Hackerrank.

  6. Rezolvați problema gigelonnaci de pe Hackerrank.

  7. Gigel și Bobi au găsit un joc nou de cărți: la începutul jocului, fiecare dintre cei doi primește un număr. Gigel primește numărul a, iar Bobi numărul b. Ei au un teanc de n cărți din care vor extrage alternativ cărți, după regula: jucătorul aflat la mutare va extrage cel mai mic divizor comun dintre numărul primit la începutul jocului și numărul de cărți din pachet. Un jucător pierde când nu poate extrage numărul respectiv de cărți din pachet. Gigel va începe mereu jocul. Cunoscând a, b și n, determinați cine va câstiga jocul (afișați numele jucătorului ce va câstiga). Prin convenție, cel mai mare divisor comun dintre 0 și a este a, unde a e un număr nenul.

Exemplu:

a = 3
b = 5
n = 9

Gigel extrage gcd(3, 9) = 3 cărți.
Rămân 9 - 3 = 6 cărți în pachet.

Bobi extrage gcd(5, 6) = 1 carte.
Rămân 6 - 1 = 5 cărți în pachet.

Gigel extrage gcd(3, 5) = 1 carte.
Rămân 5 - 1 = 4 cărți în pachet.

Bobi extrage gcd(3, 4) = 1 carte.
Rămân 4 - 1 = 3 cărți în pachet.

Gigel extrage gcd(3, 3) = 3 cărți.
Rămân 3 - 3 = 0 cărți în pachet.

Bobi extrage gcd(3, 0) = 3 cărti.
Nu se poate, nu mai sunt cărți în pachet.
Gigel câstigă.