Andrei Iulia

Report
Profesor: Tomsa Gelu
Elev: Andrei Iulia
Clasa: a XI-a B, CNAMD
PORTOFOLIU
INFORMATICA
GRILE
1. Utilizând metoda backtracking se generează în ordine lexicografică cuvintele de câte patru


litere din mulţimea A={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate. Primele

opt cuvinte generate sunt, în ordine: abab, abac, abad, abba, abbb, abbc, abbd,
abbe.

Câte dintre cuvintele generate încep cu litera b şi se termină cu litera e?

a. 9
b. 15
c. 12 d. 20

babe

bace

bade

bbbe

bbce

bbde

bcbe

bcce

bcde

bdbe

bdce

bdde

bebe

bece

b e d e => 15 variante => Varianata b)15

2.Utilizând metoda backtracking se generează în ordine lexicografică cuvintele de câte patru

litere din mulţimea A={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate. Primele

opt cuvinte generate sunt, în ordine: abab, abac, abad, abba, abbb, abbc, abbd, abbe.

Care este ultimul cuvânt generat?

a. Edcb b. eeee c. edde d. Eded

5111

5112

5113

5114

5115

5555 eeee F

5554 eeed F

5545 eede F

5454 eded A

5445 edde F => Varianta d)eded – ultimul cuvant generat

3.Utilizând metoda backtracking se generează în ordine lexicografică cuvintele de câte patru

litere din mulţimea A={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate. Primele

opt cuvinte generate sunt, în ordine: abab, abac, abad, abba, abbb, abbc, abbd, abbe.

Care este penultimul cuvânt generat?

a. edec

5454 – ultimul cuvant generat

5453 – penultimul cuvant generat => Varianta a)edec
b. eded c. edde d. edcb

4.Utilizând metoda backtracking se generează în ordine lexicografică cuvintele de câte patru

litere din mulţimea A={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate. Primele

opt cuvinte generate sunt, în ordine: abab, abac, abad, abba, abbb, abbc, abbd, abbe.

Care este antepenultimul cuvânt generat?

a. edde b. eddb c. edeb d. edcb

5452 edeb => Varianta c)edeb
(antepenultimul cuvant generat)

5.Folosind modelul combinărilor se generează numerele naturale cu câte trei cifre distincte din

mulţimea {1,2,3,7}, numere cu cifrele în ordine strict crescătoare, obţinându-se, în ordine:

123, 127, 137, 237. Dacă se utilizează exact aceeaşi metodă pentru a genera numerele

naturale cu patru cifre distincte din mulţimea {1,2,3,4,5,6,7,8}, câte dintre numerele

generate au prima cifră 2 şi ultima cifră 7?

a. 8 b. 3

2345

2346

2347

2348

2456

2457

2458

2567

2568

2578 => Varianta b)3
c. 4
d. 6

6.Utilizând metoda backtracking sunt generate numerele de 3 cifre, având toate cifrele

distincte şi cu proprietatea că cifrele aflate pe poziţii consecutive sunt de paritate diferită.

Ştiind că primele şase soluţii generate sunt, în această ordine, 103, 105, 107, 109,

123, 125, care este a zecea soluţie generată?

a. 145

103 105 107 109

123 125 127 129

143 145 147 149 => Varianta a) 145
b. 147
c. 230
d. 149

7.Folosind tehnica bactracking un elev a scris un program care generează toate numerele de

câte n cifre (0<n≤9), cifrele fiind în ordine strict crescătoare. Dacăn este egal cu 5, scrieți

în ordine crescătoare toate numerele având cifra unităților 6, care vor fi generate de

program.

12346

12356

12456

13456

23456

8.Utilizând metoda backtracking sunt generate numerele de 3 cifre care au cifrele în ordine

crescătoare, iar cifrele aflate pe poziţii consecutive sunt de paritate diferită. Ştiind că

primele cinci soluţii generate sunt, în această ordine: 123, 125, 127, 129, 145, care este

cel de al 8-lea număr generat?

a. 169

123 125 127 129

145 147 149

167 169

189
b. 149
c. 167
d. 147
=> Varianta c)167

9.Utilizând metoda backtracking sunt generate în ordine crescătoare toate numerele de 3

cifre, astfel încât cifrele sunt în ordine crescătoare, iar cifrele aflate pe poziţii consecutive

sunt de paritate diferită. Ştiind că primele trei soluţii generate sunt, în această ordine, 123,

125, 127, scrieţi toate numerele generate care au suma cifrelor egală cu 12.

123 125 127 129

145 147 149

167 169

189
=> 129 , 147 , 345

10.Un elev a scris un program care, folosind metoda backtracking, generează toate numerele

de câte 5 cifre, cifrele fiind în ordine strict crescătoare. Scrieţi toate numerele generate de

program care au prima cifră 5.

Numarul generat este 56789.

11.Un algoritm de tip backtracking generează, în ordine lexicografică, toate şirurile de 5 cifre 0

şi 1 cu proprietatea că nu există mai mult de două cifre 0 pe poziţii consecutive. Primele 7

soluţii generate sunt: 00100, 00101, 00110, 00111, 01001, 01010, 01011. Care este a

8-a soluţie generată de acest algoritm?

a. 01110

00100
100

00101
101

00110
110

00111
111

01001
1001

01010
1010

01011
1011

b. 01100
c. 01011
d. 01101
01110 => Varianta a) 01110
12.Pentru a scrie valoarea 10 ca sumă de numere prime se foloseşte metoda backtracking şi


se generează, în această ordine, sumele distincte: 2+2+2+2+2, 2+2+3+3, 2+3+5, 3+7,

5+5. Folosind exact aceeaşi metodă, se scrie valoarea 9 ca sumă de numere prime. Care

sunt primele trei soluţii, în ordinea generării lor?

2+2+2+2+2
2+2+2+3

2+2+3+3
2+2+5

2+3+5
2+7

3+7
3+3+3 => 9

5+5 =>10

13.Trei băieţi, Alin, Bogdan şi Ciprian, şi trei fete, Delia, Elena şi Felicia, trebuie să

formeze o echipă de 3 copii, care să participe la un concurs. Echipa trebuie să fie mixtă

(adică să conţină cel puţin o fată şi cel puţin un băiat). Ordinea copiilor în echipă este

importantă deoarece aceasta va fi ordinea de intrare a copiilor în concurs (de exemplu

echipa Alin, Bogdan, Delia este diferită de echipa Bogdan, Alin, Delia). Câte echipe

se pot forma, astfel încât din ele să facă parte simultan Alin şi Bogdan?

1) Alin,Bogdan,Delia / Alin,Delia,Bogdan

2)Bogdan,Alin,Delia / Bogdan,Delia,Alin

3)Delia,Alin,Bogdan / Delia,Bogdan,Alin

4)Alin,Bogdan,Elena / Alin,Elena,Bogdan

5)Bogdan,Alin,Elena / Bogdan,Elena,Alin

6)Elena,Alin,Bogdan / Elena,Bogdan,Alin

7)Alin,Bogdan,Felicia / Alin,Felicia,Bogdan

8)Bogdan,Alin,Felicia / Bogdan,Felicia,alin

9)Felicia,Alin,Bogdan / Felicia,Bogdan,Alin => 18 echipe

14.Utilizând metoda backtracking se generează permutările cuvântului info. Dacă primele trei

soluţii generate sunt: fino, fion, fnio care este cea de-a cincea soluţie?

a. Foin

INFO -1234

FINO-3124

FION-3142

FNIO-3214

FNOI-3241 => Varianta b)FNOI
b. fnoi
c. Foni
d. Ifon

15.Câte numere cu exact două cifre pot fi construite folosind doar cifre pare distincte?

a. 12 b. 14 c. 20 d. 25

24 26 28

42 46 48

62 64 68

82 84 86 => Varianta a) 12

16.Un algoritm generează în ordine crescătoare toate numerele de n cifre, folosind doar cifrele

3, 5 şi 7. Dacă pentru n=5, primele 5 soluţii generate sunt 33333, 33335, 33337,

33353, 33355, precizaţi care sunt ultimele 3 soluţii generate, în ordinea generării.

77773 77775 77777
17.Un algoritm generează în ordine descrescătoare toate numerele de 5 cifre, fiecare dintre

ele

având cifrele în ordine strict crescătoare. Ştiind că primele 5 soluţii generate sunt 56789,

46789, 45789, 45689, 45679, precizaţi care sunt ultimele 3 soluţii generate, în ordinea

Generării.

12347 12346 12345

18.Un algoritm generează, în ordine lexicografică, toate şirurile alcătuite din câte n cifre binare

(0 şi 1). Ştiind că pentru n=5, primele 4 soluţii generate sunt 00000, 00001, 00010, 00011,

precizaţi care sunt ultimele 3 soluţii generate, în ordinea obţinerii lor.

00000 00001 00010 00011 00100 00101 00110 00111 01000 01001 01010 01011
01100 01101 01110 01111

=>11101 11110 11111

19.Un algoritm generează în ordine crescătoare, toate numerele de n cifre (n<9), cu cifre

distincte, care nu au două cifre pare alăturate. Dacă pentru n=5, primele 5 soluţii generate

sunt 10325, 10327, 10329, 10345, 10347, precizaţi care sunt următoarele 3 soluţii

generate, în ordinea obţinerii lor.

n<9

10325 10327 10329 10345 10347 10349 10365 10367 10369 10385 10387 10389

20.Un algoritm generează în ordine descrescătoare, toate numerele de n cifre (n<9), cu cifrele

în ordine strict crescătoare, care nu au două cifre pare alăturate. Dacă pentru n=5, primele

5 soluţii generate sunt 56789, 45789, 45679, 45678, 36789, precizaţi care sunt

următoarele 3 soluţii generate, în ordinea obţinerii lor.

56789 45789 45679 45678 36789 35679 35678 34789 34679

21.Următoarele probleme se referă la mulţimea de numere reale M={x1, x2, …, xn} (n>1000).

Care dintre acestea, comparativ cu celelalte, admite un algoritm care se încheie după un

număr minim de paşi?

a. sortarea elementelor mulţimii M

b. generarea elementelor produsului

cartezian M x M

c. determinarea elementului minim al

mulţimii M

d. generarea tuturor permutărilor mulţimii M

Raspunsul corect este varianta d) generarea tuturor permutarilor multumii M

22.. In timpul procesului de generare a permutărilor mulţimii {1,2,…,n} prin metoda

backtracking, în tabloul unidimensional x este plasat un element xk (1≤k≤n). Acesta este

considerat valid dacă este îndeplinită condiţia:

a. xk∉{x1, x2, …, xk-1}

b. xk≠xk-1

c. xk∉{x1, x2, …, xn}

d. xk≠xk-1 şi xk≠xk+1

{1,2,…,n}

xk= {1<=k<=n}

=>Varianta c) xk∉{x1, x2, …, xn}

23.Algoritmul de generare a tuturor numerelor de 5 cifre nenule, fiecare având cifrele
ordonate

strict crescător, este echivalent cu algoritmul de generare a:

a. submulţimilor unei mulţimi cu 5 elemente

b. produsului cartezian a unor mulţimi de

cifre

c. aranjamentelor de 9 elemente luate câte 5

d. combinărilor de 9 elemente luate câte 5

Raspunsul coresc este d) combinarilor de 9 elemente luate cate 5

24.Generând şirurile de maximum 3 caractere distincte din mulţimea {A,B,C,D,E},
ordonate

lexicografic, obţinem succesiv: A, AB, ABC, ABD,…. Ce şir va fi generat imediat după

BAE? (4p.)

a. BCA

b. CAB

c. BC

d. BEA

Dupa BAE urmeaza BC  Varianta c)BC
PROBLEME

1)Generarea produsului cartezian

Fiind date n multimi A1,A2,...,An sa se scrie un algoritm de backtracking ne-recursiv care afiseaza elementele
produsului cartezian A1*A2*...* An.


program RIV_5; {produs cartezian nerecursiv}

type vector=array [1..25] of integer;

var st,nr:vector; n:integer; {st=vectorul stiva}


procedure initializari; {initializeaza stiva si citeste datele de intrare}

var i:integer;

begin

write ('Numarul de multimi n='); readln (n);

for i:=1 to 25 do st[i]:=0;

for i:=1 to n do




begin
write ( 'Cate elemente are multimea ',i,' : ' ); readln(nr[i]);
end;
end;


procedure tipar (p:integer); {tipareste o solutie memorata in vectorul st}

var i:integer;






begin
for i:=1 to p do
write (st[i]:4,' ' );
writeln;
end;

procedure back;
{implementeaza algoritmul ne-recursiv de backtracking}

var p:integer;
{varful stivei }

begin

p:=1; st[p]:=0;

while p>0 do

begin


{initializam primul nivel}
{cat timp stiva nu devine din nou vida}
if st[p]<nr[p] then {daca mai exista vreo valoare neicercata pe nivelul p}
begin
{punem pe nivelul p urmatoarea valoare din multimea solutiilor posibile }

st[p]:=st[p]+1;

if true then

if p=n then

tipar(p)
{daca mai exista vreo valoare neincercata pe nivelul p}
{daca solutia este si finala}
{tiparim solutia}
else


begin

p:=p+1; st[p]:=0; {trecem la nivelul urmator, pe care il re-initializam}
end;





end;
else
{adica pe nivelul p nu se mai poate incerca nici o valoare}
p:=p-1;
end;
end;


begin

initializari;

back;
{pasul inapoi la nivelul anterior}

2)Generarea combinarilor

Fiind date doua numere naturale n si k , sa se genereze toate combinarile de n elemente luate cate k.


program RIV_6;
{combinari de n cate k ne-recursiv}

type vector=array [1..25] of integer;

var st:vector; n,k:integer;
{st=vectorul stiva}


procedure initializari ;

var i:integer;

begin

repeat

write('n='); readln (n);

write('k='); readln (k);

until n>=k;

for i:=1 to 25 do st[i]:=0;

end;
{initializeaza stiva si citeste n si k }


procedure tipar (p:integer);

var i:integer;






begin
for i:=1 to p do
write(st[i]:4,' ');
writeln;
end;
{tipareste o solutie memorata in vectorul st}

function valid (p:integer): boolean ;

{testeaza daca valoarea st[p] a generat o solutie valida, returnand true sau false}

var i:integer; ok:boolean;

begin

{valoarea de pe nivelul p nu trebuie sa se mai gaseasca pe niciunul dintre nivelele anterioare 1,2,...,p-1}

ok:=true;


for i:=1 to p-1 do
if st[p]<=st[i] then
ok:=false;



valid:=ok;
end;


procedure back;

var p:integer;

begin

p:=1; st[p]:=0;

while p>0 do

begin

if st[p]<n then

{implementeaza algoritmul ne-recursiv de backtracking}
{varful stivei}
{initializam primul nivel}
{cat timp stiva nu devine din nou vida}
{daca mai exista vreo valoare neicercata oe nivelul p}
begin

{punem pe nivelul p urmatoarea valoare din multimea solutiilor posibile}

st[p]:=st[p]+1;

if valid(p) then

if p=k then

tipar(p)

else



{daca solutia (st[1], st[2],...,st[p]) este valida}
{daca solutia esti si finala}
{tiparim solutia}
begin
p:=p+1; st[p]:=0;
end;
{trecem la nivelul urmator, pe care il re-initializam}


end
else
p:=p-1;



end;
end;


begin

initializari;

back;


end.
{adica pe nivelul p nu se mai poate incerca nici o valoare}
{pasul inapoi la nivelul anterior}


3.Generarea aranjamentelor
Se citesc n si p. Sa se genereze toate aranjamentele de n luate cate p.


program aranjamente;

type stiva-array [1..100] of integer;

var st:stiva ;

n,k,p:integer;

as,ev:boolean;


procedure init(k:integer; var st:stiva);

begin


st[k]:=0;
end;


procedure succesor(var as:boolean; var st:stiva; k:integer);

begin

if st[k]<n


then begin
st[k]:=st[k]+1; as:=true
end



else as:=false
end;


procedure valid (var ev:boolean; st:stiva; k:integer);

function solutie(k:integer):boolean;

begin


solutie:=(k=p)
end;


procedure tipar;

var i:integer;

begin

for i:=1 to p do write (st[i]);

writeln

end;


begin

write('N='); readln(n);

write ('P='); readln(p);

k:=1; init (k,st);

while (k>0) do




begin
repeat
succesor(as,st,k);
if as then valid(ev,st,k);

until (not as) or (as and ev);

if as then
if solutie(k)


then tipar

else begin

k:=k+1;

init(k,st)

end
else k:=k-1




end
end.

4.Problema colorarii hartilor

Fiind data o harta cu n tari, se cer toate solutiile de colorare a hartii, utilizand cel mult 4 culori, astfel incat doua tari cu
frontiera comuna sa fie colorate diferit. Este demonstrat faptul ca sunt suficiente numai 4 culori pentru ca orice harta sa
poata fi colorata.


program culori;

type stiva=array [1..100] of integer;

var st:stiva;

i,j,n,k:integer;

as,ev:boolean;

a:array [1..20,1..20] of integer;


procedure init (k:integer; var st:stiva);

begin


st[k]:=0;
end;


procedure succesor(var as:boolean; var st:stiva; k:integer);

begin

if st[k]<4






then
begin
st[k]+1; as:=true
end
else as:=false
end;

procedure valid(var ev:boolean; st:stiva; k:integer);

var i:integer;

begin

ev:=true;

for i:=1 to k-1 do if (st[i]=st[k]) and (a[i,k]=1) then ev:=false

end;


function solutie(k:integer):boolean;

begin


solutie:=(k=n)
end;


procedure tipar;

var i:ineteger;

begin

for i:=1 to n do writeln( 'Tara=',i,'; culoarea=',st[i]);

writeln('--------------')

end;

begin

write('Numarul de tari='); readln(n);

for i:=1 to n do






for j:=1 to i-1 do
begin
write('a[',i,',',j,']='); readln(a[i,j]);
a[j,i]:= a[i,j]
end;
k:=1; init (k,st);



while k>0 do
begin
repeat

succesor(as,st,k);

if as then valid(ev,st,k);

until (not as) or (as and ev);

if as then

if solutie(k)

then tipar

else
begin

k:=k+1; init(k,st)


end

else k:=k-1



end
end.

5.Problema celor n dame

Fiind data o tabla de sah n*n , se cer toate solutiile de aranjare a n dame, astfel incat sa nu se afle doua dame pe aceeasi linie,coloana sau
diagonala(damele sa nu se atace reciproc).


Program damer;

type tabla=array[1..20] of ineteger;

var t:tabla;

i,n:ineteger;


procedure tipar;

var i:integer;

begin

for i:= 1 to n do write (t[i]);

writeln;

end;




procedure dame(k:integer);
var i,j:ineteger;
corect:boolean;

begin

if k=n+1

then tipar

else

begin


for i:=t[k]+1 to n do
begin

t[k]:=i;

coresct:=true;

for j:=1 to k-1 do


if (t[j]=t[k]) or (abs(t[k]-t[j])=(k-j) )
then corect:=false;

if corect then dame (k+1)
end;


end;

t[k]:=0;

end;


begin

write('n='); readln(n);

for i:=1 to n do t[i]:=0;

dame(1)

end.


6.Generarea partitiilor unui numar natural.

Se citeste un numar natural n. Se cere sa se tipareasca toate modurile de descompunere a sa ca suma de numere naturale.


program part_n;


type solutie=array[1..20] of integer;

var n:integer;

s:solutie;


procedure tipar(k:integer);

var i:integer;

begin



for i:=1 to k do write (s[i]);
writeln;
end;


procedure part(k,v:integer);

var i:integer;

begin

s[k]:=v;

tipar(k);

for i:=1 to s[k]-1 do

begin

s[k]:=s[k]-i;

part(k+1,i);

s[k]:=s[k]+i

end;

end;


begin

write('n='); readln(n);

part (1,n)

end.

7.Plata unei sume cu bacnote de valori de date.

Se dau suma s si n tipuri de monede avand valori de a1,a2, ... , an lei. Se cer toate modalitatile de plata a sumei s utilizand aceste monede.


program bacnote;

uses crt;

type vector=array[1..9] of integer;

var sol,a,b:vector;

n,i,s:integer;


procedure tipar(k:integer);

begin


writeln('Solutie');
for i:=1 to k do

if sol[i]<>0 then writeln(sol[i],' becnote de ',a[i]);

readln;

end;


procedure plata (k,s0:integer);

begin


while (sol[k]<b[k]) and (s0+a[k] <=s) do
begin

sol[k]:=sol[k]+1;

if sol[k]>0 then s0:=s0 + a[k];

if s0=s then tipar(k)

else
if k<n then plata(k+1,s0)





end;
sol[k]:=-1;
end;

begin

clrscr;

write('cate tipuri de bacnote avem? '); readln(n);

write('suma='); readln(s);

for i:=1 to n do

begin

write('valoarea monedei de tipul', i,' ');

readln (a[i]);

b[i]:=s div a[i];

sol[i]:=-1;

end;

plata(1,0);

end.


8.Saritura calului

Se da o tabla de sah de dimensiune n*n. Un cal se afla in unul dintre colturile tablei. Sa se gaseasca toate
modalitatile prin care acesta poate sa parcurga intreaga tabla fara sa treaca de doua ori prin acelasi loc.


program RIV_13;

var st:array[1..64,1..2] of integer;

n,i:integer; vecini:array[1..8,1..2] of integer; f:text;


function valid(p:integer): boolean;

var k:integer;

begin

valid:=false;

if (st[p,1]>=1) and (st[p,1]<=n) and (st[p,2]>=1) and (st[p,2]<=n);

then


begin
{daca pozitia adaugata pe stiva reprezinta o saritura in interiorul tablei de sah si daca nu a mai fost vizitata in cursul
constructiei drumului curent, atuncia ea este valida si se mai poate merge mai departe}

valid:=true;

for k:=1 to p-1 do




if (st[p,1]=st[k,1]) and (st[p,2]=st[k,2]) then valid:= false;
end;
end.

similar documents