I. 1.
d) !(a < -4 || a > -1) || !(a < 2 || a > 4)
I. 2.
a) 7
b) 121, 253
c)
x <- n
CAT TIMP x >= y EXECUTA
x <- x - y
d)
#include <iostream>
using namespace std;
int n, y, x;
int main(){
cin>>n;
x = 1, y = 2;
while(x != 0 && y * y <= n){
x = n % y;
y = y + 1;
}
cout<<y - 1;
}
II. 1.
a. 14
II. 2.
b. 3
II. 3
a)
#include <iostream>
using namespace std;
int B[105][105], n, A[105][105], sum;
int main(){
cin>>n;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
cin>>A[i][j];
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++){
int sum = 0;
for(int x = 1; x <= n; x ++)
sum += A[i][x] * A[x][j];
B[i][j] = sum;
}
bool ok = true;
for(int i = 1; i <= n; i ++){
int p = B[i][1] % 2;
for(int j = 2; j <= n; j ++)
if(p != (B[i][j] % 2) )
ok = false;
}
for(int i = 1; i <= n; i++, cout<<"\n")
for(int j = 1; j <= n; j++)
cout<<B[i][j]<<" ";
if(ok)
cout<<"B are proprietatea ParImpar";
else
cout<<"B nu are proprietatea ParImpar";
}
b)
II. 4.
Metoda folosita se bazeaza pe faptul ca fiecare element de pe fiecare linie va fi
inmultit cu fiecare element de pe coloana, iar suma produselor va reprezenta fiecare element din matricea rezultat
Avem 3 cazuri posibile:
| i i | | i i | | p p |
A = | | sau A = | | sau A = | |, am notat cu i nr. impar si cu p nr. par
| p p | | i i | | p p |
Astfel B poate fi :
1)
| i i | | i i | | i * i + i * p i * i + i * p |
B = | | x | | = | |
| p p | | p p | | p * i + p * p p * i + p * p |
| i i |
= | |
| p p |
2)
| i i | | i i | | i * i + i * i i * i + i * i |
B = | | x | | = | |
| i i | | i i | | i * i + i * i i * i + i * i |
| p p |
= | |
| p p |
3)
| p p | | p p | | p * p + p * p p * p + p * p |
B = | | x | | = | |
| p p | | p p | | p * p + p * p p * p + p * p |
| p p |
= | |
| p p |
Din 1), 2) si 3) => Daca A respecta ParImpar atunci si
A x A respecta ParImpar
#include <iostream>
using namespace std;
int sol[105], v[105], n, x[105];
bool g = false;
bool ok(int k){
for(int i = 1; i < k; i++)
if(x[i] == x[k])
return false;
return true;
}
bool test(){
for(int i = 1; i <= n; i++)
if(v[x[i]] == v[x[i + 1]])
return false;
return true;
}
void bkt(int k){
for(int i = 1; i <= n; i++){
x[k] = i;
if(ok(k)){
if(k == n){
if(test() && g == false){
g = true;
for(int i = 1; i <= n; i++)
sol[i] = v[x[i]], cout<<sol[i]<<" ";
}
}
else{
bkt(k + 1);
}
}
}
}
int main(){
cin>>n;
for(int i = 1; i <= n; i++)
cin>>v[i];
bkt(1);
if(!g)
cout<<"nu exista";
}
III. 1.
b. 14
III. 2.
C(5, 3) = 10
III. 3.
a)
2 5 8 | 7 3 6 | 9 4 1
6 1 9 | 8 2 4 | 3 5 7
4 3 7 | 9 1 5 | 2 6 8
- - - - - - - - -
3 9 5 | 2 7 1 | 4 8 6
7 6 2 | 4 9 8 | 1 3 5
8 4 1 | 6 5 3 | 7 2 9
- - - - - - - - -
1 8 4 | 3 6 9 | 5 7 2
5 7 6 | 1 4 2 | 8 9 3
9 2 3 | 5 8 7 | 6 1 4
b)
Pentru fiecare din cele 9 submatrice ale grilei SUDOKU
Determinam care sunt elementele care nu apar in intervalul [1, 9] si salvam pozitiile necompletate
Dupa care, pentru fiecare pozitie necompletata din submatrice ,
alegem cate un element neplasat, in cazul in care elementul plasat nu apare nici pe linia, nici pe coloana curenta
inseamna ca il putem plasa, dupa care putem merge la urmatoarea pozitie necompletata din submatrice, rezpectiv la
urmatoarea submatrice
Daca nu pot plasa toate elementele negative in submatricea curenta ,
inseamna ca puzzle-ul nu are solutie.
c)
void SUDOKU(int a[15][15], int sol[15][15]){
for(int i = 1; i <= 9; i++)
for(int j = 1; j <= 9; j++)
sol[i][j] = a[i][j];
struct P{
int lin, col;
} p[90];
int sz = 0;
bool n[15], ok = true;
for(int i = 1; i <= 9 && ok == true; i += 3)
for(int j = 1; j <= 9 && ok == true; j += 3){
for(int e = 1; e <= 9; e ++)
n[e] = 0;
sz = 0;
for(int x = i; x <= i + 3 - 1; x ++)
for(int y = j; y <= j + 3 - 1; y ++){
if(sol[x][y] == 0)
p[++sz].lin = x, p[sz].col = y;
else
n[sol[x][y]] = 1;
}
for(int k = 1; k <= sz; k ++){
int x = p[k].lin, y = p[k].col;
for(int e = 1; e <= 9; e ++)
if(n[e] == 0 && sol[x][y] == 0){
bool g = false;
for(int c = 1; c <= 9; c ++)
if(sol[x][c] == e)
g = true;
for(int l = 1; l <= 9; l ++)
if(sol[l][y] == e)
g = true;
if(!g){
sol[x][y] = e;
n[e] = 1;
}
}
if(sol[x][y] == 0){
ok = false;
for(int l = 1; l <= 9; l ++)
for(int c = 1; c <= 9; c ++)
sol[l][c] = 0;
}
}
}
}