Fie o matrice a cu 4 linii și 4 coloane, inițializată cu următoarele valori, pe linii: {1,2,3,4}; {5,6,7,8}; {9,1,2,3}; {4,5,6,7}. Ce valoare va avea variabila n după rularea următoarei secvențe de cod?
int a[4][4];
int n = 0, i, j;
// initializare matrice
for(i = 0; i <= 3; i++){
for(j = 0; j <= 3; j++){
if(a[i][j] == a[j][i]){
n++;
}
}
}
- 4
- 6
- 13
- 2
- 1
- 5
Secvența numără perechile (i,j) pentru care a[i][j] == a[j][i]. Cele 4 elemente de pe diagonala principală verifică mereu condiția.În afara diagonalei, o pereche simetrică se numără de două ori, ca (i,j) și (j,i). Comparând: a[0][1]=2 cu a[1][0]=5, a[0][2]=3 cu a[2][0]=9, a[0][3]=4 cu a[3][0]=4, a[1][2]=7 cu a[2][1]=1, a[1][3]=8 cu a[3][1]=5, a[2][3]=3 cu a[3][2]=6 — doar a[0][3] și a[3][0] sunt egale. Deci n =4+2=6.Fie funcția dată prin următorul pseudocod (% reprezintă restul împărțirii întregi). Care dintre următoarele apeluri au ca rezultat numai valori pare?
intreg f(intreg n, intreg y) {
dacă (n > 0)
dacă (n % 2 == 0) returnează f(n - 1, y + 1) + y;
altfel returnează f(n - 1, y + 1);
altfel returnează 0;
}
f(117, 200), f(222, 300), f(322, 485), f(422, 653)f(116, 100), f(220, 181), f(321, 281), f(420, 551)f(117, 130), f(222, 461), f(323, 771), f(422, 891)f(117, 240), f(222, 480), f(322, 795), f(422, 833)f(116, 150), f(222, 81), f(321, 331), f(420, 671)f(118, 241), f(222, 291), f(322, 481), f(422, 451)
La fiecare pas n scade cu 1 și y crește cu 1, iar valoarea curentă a lui y se adună doar când n este par. Pentru f(n, y) cu p=⌊n/2⌋ pași pari rezultă f(n,y)=py+p(p−1) dacă n este par și f(n,y)=py+p2 dacă n este impar.Cum p(p−1) este mereu par, pentru n par f are paritatea lui py, iar pentru n impar paritatea lui p(y+1); în ambele cazuri un p par dă un rezultat par. Apelurile f(116, 100), f(220, 181), f(321, 281), f(420, 551) au toate p par (58, 110, 160, 210), deci toate valorile sunt pare (de exemplu f(116, 100) =9106).Fiecare dintre celelalte liste conține un apel cu rezultat impar: f(322, 485) =103845, f(222, 461) =63381, f(322, 795) =153755, f(222, 81) =21201, f(118, 241) =17641.Specificați ce afișează următoarea secvență de cod.
char sir[27] = "examenIULIE2024Politehnica";
int i;
for(i = 0; i < strlen(sir); i = i + 1){
if(sir[i] >= 'a' && sir[i] <= 'z')
printf("%d", i); // cout<<i;
else
sir[i] = '\0';
}
0123451617181920212223242501234511121314678910111112131415678910
Primele 6 caractere, examen, sunt litere mici, deci se afișează indicii 0,1,2,3,4,5.La i=6 caracterul I nu este literă mică, așa că se scrie '\0' pe poziția 6. Acum strlen(sir) devine 6, condiția 7 < 6 este falsă și bucla se oprește. Se afișează 012345.Definim un tip înregistrare pentru reținerea unei fracții de forma a/b unde a este numărătorul și b este numitorul. Fie un vector care reține 31 de fracții în care primul element este pe poziția 0 și reține fracția 1/1. Definim restul elementelor din vector după următoarele formule, unde i>=0.Ce fracție va reține elementul de pe poziția 9 din vector (adică v[9])?
typedef struct fractie { int a, b; } Fractie;
v[2*i+1].a = v[i].a;
v[2*i+1].b = v[i].a + v[i].b;
v[2*i+2].a = v[i].a + v[i].b;
v[2*i+2].b = v[i].b;
- 5/3
- 5/2
- 3/5
- 7/4
- 2/7
- 4/3
Din v[i] =a/b se obțin v[2i+1] =a/(a+b) și v[2i+2] =(a+b)/b. Cum 9=2⋅4+1, 4=2⋅1+2 și 1=2⋅0+1, se merge pe lanțul v[0] → v[1] → v[4] → v[9].v[0] =1/1, v[1] =1/2, v[4] =(1+2)/2=3/2, iar v[9] =3/(3+2)=3/5.Pătratul oricărui număr prim n mai mare decât 3 poate fi scris în forma 24k+1, cu k număr natural. Care dintre următoarele expresii verifică dacă numărul n are această proprietate?
I1: (n * n - 1) % 24 == 0
I2: (n - 1) * (n + 1) % 24 == 1
I3: ((n - 1) % 24 == 0) && ((n + 1) % 24 == 0)
I4: ((n - 1) % 24 == 0) || ((n + 1) % 24 == 0)
I5: ((n - 1) * (n + 1)) % 24 == 0
I6: 24 * n * n - 1 == 0
I2 și I6I1 și I4I4 și I6I1 și I3I3 și I4I1 și I5
Proprietatea înseamnă n2−1=(n−1)(n+1) divizibil cu 24, adică exact ce testează I1 și I5.I2 se evaluează de la stânga la dreapta ca ((n-1)*(n+1)) % 24 == 1, fals pentru orice prim n>3 (restul este 0). I3 cere ca 24 să dividă simultan n−1 și n+1, imposibil. I4 cere ca unul dintre ei să fie multiplu de 24 (fals pentru n=5, deși 25=24+1). I6 compară 24n2−1 cu 0, niciodată adevărat.