Variabila x este de tip întreg și poate memora un număr natural format din exact două cifre. Indicați cea mai mare valoare pe care o poate avea expresia:
abs(x / 10 – x % 10 + 1)
- 7
- 6
- 9
- 10
- 4
- 8
Pentru x=ab, x / 10 este cifra zecilor a, iar x % 10 cifra unităților b, deci expresia este ∣a−b+1∣, cu a∈{1,…,9} și b∈{0,…,9}.Cea mai mare valoare a lui a−b+1 este 9−0+1=10, iar cea mai mică 1−9+1=−7, cu modulul 7. Maximul este deci 10, obținut pentru x=90.Se dă problema: calculați suma primelor n elemente din șirul lui Fibonacci. Care sunt complexitățile timp, respectiv, spațiu minime pentru a obține soluția pentru această problemă?
- O(2n) și O(1)
- O(n2) și O(n)
- O(n2) și O(1)
- O(n) și O(1)
- O(n) și O(n)
- O(2n) și O(n)
Termenii se pot genera pe rând, păstrând doar ultimii doi termeni și suma parțială: n pași, cu un număr constant de variabile.Dintre variantele propuse, cea mai bună este deci timp O(n) și spațiu O(1). Timpul exponențial corespunde recursivității naive, iar spațiul O(n) apare doar dacă se memorează inutil tot șirul.Se consideră declarările de mai jos:Câmpul descriere al variabilei p a fost inițializat cu un șir de caractere de lungime 10, iar câmpul cod al variabilei p a fost inițializat cu o valoare între 1 și 499.Care dintre următoarele instrucțiuni nu este corectă din punct de vedere sintactic?
struct Produs{
int cod;
char descriere[50];
} p;
struct Magazin{
struct Produs produse[500];
char nume[50];
} m;
m.produse[p.cod].cod++;p.descriere[12]++;m.produse[p.cod].cod=p.cod;m.produse[p.cod].nume[2]='n';m.nume[3]=p.descriere[2];m.produse[p.cod]=p;
m.produse[p.cod] este o structură Produs, care are doar câmpurile cod și descriere; câmpul nume aparține lui Magazin, deci m.produse[p.cod].nume[2] nu se compilează.Celelalte instrucțiuni sunt valide: incrementarea unui caracter (p.descriere[12], cu indicele sub 50), atribuiri între câmpuri de același tip și atribuirea unei structuri întregi.Fie o matrice M cu 20 de linii și 21 de coloane, care conține următoarele elemente: M[i][j] = i*i dacă i = j, M[i][j] = min{i, j} dacă i ≠ j, pentru 1≤i≤20, 1≤j≤21. Care este suma tuturor elementelor din matrice?
- 10040
- 4042
- 2560
- 6760
- 5240
- 5740
Dacă toate elementele ar fi min{i,j}, linia i ar avea suma (1+2+…+i)+i(21−i); însumând pentru i de la 1 la 20 se obține 1540+1540=3080.Pe diagonală elementul este i2 în loc de i, ceea ce adaugă ∑i=120(i2−i)=2870−210=2660. Suma este 3080+2660=5740.Fie a, b, c și d patru variabile întregi care pot lua valori 0 sau 1. Care din expresiile de mai jos este echivalentă cu următoarea expresie:
(a && b) || (c && d)
!((a || b) && (c || d))!((!a && !b) || (!c && !d))!((!a || !b) && (!c || !d))!(!(a && b) || !(c && d))!(!(a || b) && !(c || d))(!a || !b) && (!c || !d)
Din legile lui De Morgan, !a || !b este negația lui a && b, iar !c || !d este negația lui c && d. Notând P = a && b și Q = c && d, expresia !((!a || !b) && (!c || !d)) este ¬(¬P∧¬Q)=P∨Q, adică exact expresia dată.Celelalte expresii se reduc, de exemplu, la (a || b) && (c || d), la (a && b) && (c && d) sau la negația expresiei date, care diferă pe unele combinații de valori.