220 likes | 407 Views
Probleme pentru teza. Program probleme Grile Magdas Diana. A. 1. Generarea permutărilor Se citeşte un număr natural n . Să se genereze permutările de n elemente ale mulţimii {1,2,…,n} . Simulaţi executarea algoritmului pentru n=3 . Type vector = array[1..100] of integer;
E N D
Problemepentruteza Program probleme Grile Magdas Diana
A. 1. Generarea permutărilorSe citeşte un număr natural n. Să se genereze permutările de n elemente ale mulţimii {1,2,…,n}. Simulaţiexecutareaalgoritmuluipentrun=3. • Type vector = array[1..100] of integer; • Var x:vector; • n: integer; • Procedure solutie; • Vari: integer; • Begin • Write (‘(‘); • For i:= 1 to do write (x[i],’,’); • Writeln (x[n],’)’); • End; • Function continuare (k:integer):Boolean; • Var i:integer; • ok:Boolean; • Begin • Ok:= true ; • If k = 1 then continuare:= true • Else if i:= 1 to k-1 do • if x[k]=x[i] then ok:= false; • Continuare:= ok; • End; • Procedure back (K:integer); • Var i:integer; • Begin • If (k=n+1) then solutie • Else begin • For i:= 1 to n do • Begin x[k]:=I ; • If continuare (k) then back (k+1); • End; • End; • End; • Begin • Write (‘n=’); readln (n); • Back(1); • Readln; • End. • Pentru n=3 Raspuns: 6
A. 2. Generarea aranjamentelorSe citesc două numere naturale n şi p. Să se genereze toate aranjamentele de n elemente luate câte p ale mulţimii {1,2,…,n}. Simulaţiexecutareaalgoritmuluipentrun=4şip=2. • Type vector= array [1..20] of integer; • Var x:vector; • n,p: integer; • Procedure solutie; • Var i:integer; • Begin • For i:= 1 to p do • Write (x[i],’ ‘); • End; • Function continuare (k:integer):Boolean; • Var i:integer; • Begin • Continuare:= true; • For I:= 1 to k-1 do • if x[i]=x[k] then continuare:= false; • End; • Procedure back (K:integer); • Vari: integer; • Begin • If ( k=p+1) then solutie • Else for I:=1 to n do • Begin • W[k]:=I; • If continuare (k) then back(k+1); • End; • End; • Begin • Write ( ‘n=’); readln(n); • Write ( ‘p=’); readln(p); • Back(1); • End. • Pentru n=4 si p=2; Aranjamente generate: 12.
A.3. Generarea combinărilorSe citesc două numere naturale n şi p. Să se genereze toate combinările de n elemente luate câte p ale mulţimii {1,2,…,n}. Simulaţiexecutareaalgoritmuluipentrun=4şi p=2. • Type vector = array [0..20] of integer; • Var x:vector; • n,p : integer; • Procedure solutie; • Vari: integer; • Begin • For i:=1 to p do write (x[i], ‘ ‘); • Writeln; • End; • Procedure back ( k: integer); • Var I : integer; • Begin • If (k=p+1) then solutie • Else for i:= x[k-1]+1 to n do • Begin • X[k]:=I; • Back (k+1); • End; • End; • Begin • Write (‘n=’); readln (n); • Write (‘p=’); readln (p); • Back(1); • End. • Pentru n=4 şi p=2 • Combinari generate: 6
A. 4. Generareapartiţiilor unui număr naturalSe citeşte numărul natural n. Să se genereze toate modurile de descompunere a lui n ca sumă de numere naturale. Simulaţiexecutareaalgoritmuluipentrun=5. • Type vector = array [1..20] of integer • Var x: vector; • n,s: integer; • Procedure solutie (k:integer); • Vari: integer; • Begin • For i:= 1 to k do write (x[i], ‘ ‘); • writeln; • End; • Function continuare ( k: integer): Boolean; • Begin • Continuare:= ( x[k]+s)< n; • End; • Procedure back (k:integer); • Begin • If (s=n) then solutie (k-1) • else • Begin • X[k]:=0; • While continuare(k) do • Begin • X[k]:= x[k]+1; • S:=s+x[k]; • Back k(k+1); • S:=s-x[k]; • End; • End; • End; • Begin • Write(‘n=’); • Readln(n); • Back(1); • Readln; • End. • Pentru n=5 • Partitii generate: 1+1+1+1+1; 1+1+1+2; 1+1+2+1; 1+2+1+1; 1+1+3; 1+3+1; 2+1+1+1; 2+1+2; 2+2+1; 3+1+1; 3+2; 4+1; 5.
A. 5. Generarea submulţimilor unei mulţimiSe citesc cele n elemente ale unei mulţimi reprezentată prin vectorul a. Să se genereze toate submulţimile mulţimii {a1,a2,…,an}. Simulaţiexecutareaalgoritmuluipentrun=3. • Type stiva= array[1..20] of integer; • Var x: stiva • n,k: integer; • Procedure solutie ; • Var i : integer; • Begin • For i:= 1 to n do write (x[i], ‘ ‘); • writeln; • End; • Function continuare (k:integer):Boolean; • Vari : integer; • Begin • Continuare:= true; • End; • Procedure backtrack; • Begin • K:=1; x[k]:= -1; • While (k>0) do • Begin • while (x[k]<1) do • Begin • X[k]:= x[k]+1; • If continuare (k) then • if (k=n) then solutie • else begin • K:=k+1; • X[k]:= -1; • end; • end; • K:=k-1; • End; • End; • Begin • Write (‘n=’); • Readln(n); • Backtrack; • End. • Pentru n=3 Multimea {1,2,3} • Submultimiposibile: {Ø},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}.
A. 6. Problemacolorării hărţilorFiind data o hartă cu nţări, se ceretoatesoluţiile de colorare a hărţii, utilizândcelmult 4 culori, astfelîncâtdouăţări cu frontierăcomunăsă fie coloratediferit. • Const c:array[1..4] of char= (‘G’,’R’,’A’,’V’); • Type vector= array[1..50] of integer; • Matrice= array[1..50,1..50] of integer; • Var A: matrice; • X:vector; • n:integer; • Procedure citire (var n:integer; var A:matrice); • Vari,j:integer; • Begin • Write (‘n=’); readln(n); • For i:=1 to n do • For j:=1 to n do • Begin write (‘A[‘,i,’,’,j,’]=’); • readln ( A[i,j]) • End; • End; • Procedure solutie; • Vari: integer; • Begin • For i:=1 to n do • writeln ( ‘tara’,I,’:’, C[x[i]]); • End; • Function continuare (k:integer):Boolean; • Vari: integer; • Begin • Continuare := true ; • For i:= 1 to k-1 do • If ( A[I,k]=1) and ( x[i]=x[k]) then • Continuare := false; • End; • Procedure back(k:integer); • Var i:integer; • Begin • If(k=n+1) then solutie • else • For i:= 1 to 4 do • Begin x[k]:= i ; • If continuare (k) then • Back(k+1) • End; • End; • Begin • Citire (n,A); • Back(1); • End.
A. 7. SărituracaluluiSe consideră o tablă de şahnxnşi un cal plasatîncolţul din stânga, sus. Se ceresă se afişeze un drum al caluluipe table de şah, astfelîncâtsătreacă o singurădatăprinfiecarepătrat al tablei. • Type vector= array [1..400] of integer; • Matrice = array [1..20,1..20] of integer; • Const dx : array [1..8] of integer = (-2,-1,1,2,2,1,-1,-2); • Dy : array[1..8] of integer = (-1,-2,-2,-1,1,2,2,1); • Var A: matrice; • X,y:vector; • n: integer; • Procedure solutie; • Vari,j:integer; • Begin • Writeln; • For i:= 1 to n do • For j:= 1 to n do • Begin • Write ( A[i,j], ’ ‘); • Writeln; • End; • End; • Function continuare ( k:integer):Boolean; • Varok:Boolean; • Begin • Ok:= true; • If (x[k]<1) or (k[k]>n) or (y[k]<1) or (y[k]>n) • or ( A[x[k],y[k]]>0) then ok:false; • Continuare :=ok; • End; • Procedure back(k:integer); • Var I:integer; • Begin • If (k= nxn+1) then solutie • else • Begin • For i:=1 to 8 do • Begin • X[k]:= x[k-1]+ dx[i]; • Y[k]:=y[k-1]+dy[i]; • A[x[k],y[k]]:=k; • If continuare (k) then Back(k+1); • A[x[k],y[k]]:=0; • End; • End; • End; • Begin • Write ( ‘n=’); readln(n); • X[1]:=1 , y[1]:= 1, A[1,1]:=1; • Back(2); • Readln; • End.
A. 8. Problema reginelorSă se determine toate posibilităţile de aranjare a n regine pe o tablă de şah de dimensiune nxn astfel încât reginele să nu se atace reciproc. Regina atacă piesele aflate pe aceeaşi linie, coloană sau diagonală. • Type vector= array [1..30] of integer; • Var x: vector; • n: integer; • Procedure solutie; • Vari,j: integer; • Begin • Writeln; • For i:= 1 to n do • Begin • For j:= 1 to n do • If x[i]=j then write (‘*’) • else write (‘ ‘); • Writeln; • End; • End; • Function continuare (k:integer):Boolean; • Var i:integer; • ok:Boolean; • Begin • ok:=true; • For i:= 1 to k-1 do • If (x[k]=x[i]) or (abs (x[k]-x[i])=(k-i)) • then ok := false; • Continuare :=ok; • End; • Procedure back(k:integer); • Var i:integer; • Begin • If ( k=n+1) then solutie • else begin • For i:= 1 to n do • begin • X[k]:= I; • If continuare (k) then Back(k+1); • end; • end; • End; • Begin • Write (‘n=’); Readln(n); • Back (1); • Readln; • End.
A. 9. Problema turelorSă se determine toate posibilităţile de aranjare a n ture pe o tablă de şah de dimensiune nxn astfel încât turele să nu se atace reciproc. Tura atacă piesele aflate pe aceeaşi linie sau coloană. • Type vector= array [1..30] of integer; • Var x: vector; • n: integer; • Procedure solutie ; • Vari,j: integer; • Begin • For i:= 1 to n do • begin • for j:=1 to n do • If x[i]=j then write (‘*’) • else write (‘ ‘); • writeln; • end; • End; • Function continuare (k:integer):Boolean; • Var i:integer; • ok:Boolean; • Begin • Ok:= true ; • If k = 1 then continuare:= true • else if i:= 1 to k-1 do • If x[k]=x[i] then ok:= false; • Continuare:= ok; • End; • Procedure back (K:integer); • Var i:integer; • Begin • If (k=n+1) then solutie • else begin • For i:= 1 to n do • begin • x[k]:=I ; • If continuare (k) then back (k+1); • end; • end; • End; • Begin • Write (‘n=’); readln (n); • Back(1); • Readln; • End.
B. Grile 1. Utilizând metoda backtracking se generează înordine lexicografică cuvintelede 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? • 9 b. 15 c. 12 d. 20 Rezolvare: babe, bace, bade, bbbe, bbce, bbde, bcbe, bcde, bcce, bdbe, bdce, bdde. c. 12
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? • edcb b. eeee c. edde d. eded Rezolvare: edaa, edab, edac,….,eddd, edde, edea, edeb, edec, eded. d. eded 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? • edec b. eded c. edde d. edcb Rezolvare: a. edec
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? • edde b. eddb c. edeb d. Edcb Rezolvare: c. edeb 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? • 8 b. 3 c. 4 d. 6 Rezolvare: 2567, 2467, 2367, 2457, 2357, 2347. 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ă? • 145 b. 147 c. 230 d. 149 Rezolvare: 103, 105, 107, 109, 123, 125, 127, 129, 143, 145,147, 149. • 145 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. Rezolvare: 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? • 169 b. 149 c. 167 d. 147 Rezolvare: 123, 125, 127, 129, 145, 147, 149, 167,169. c. 167 9. Utilizând metoda backtracking sunt generate în ordine crescătoare toatenumerele de 3cifre, 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. Rezolvare: 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. Rezolvare: 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 7soluţii generate sunt: 00100, 00101, 00110, 00111, 01001, 01010, 01011. Care este a 8-a soluţie generată de acest algoritm? • 01110 b. 01100 c. 01011 d. 01101 Rezolvare: 00100, 00101, 00110, 00111, 01001, 01010, 01011, 01101. d. 01101.
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? Rezolvare: 2+2+2+3, 2+2+5, 2+7. 13. 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? • foin b. fnoi c. foni d. ifon Rezolvare: Fino, fion, fnio, fnoi, foin. 14. Câte numere cu exact două cifre pot fi construite folosind doar cifre pare distincte? • 12 b. 14 c. 20 d. 25 Rezolvare: 24, 26, 28, 42, 46, 48, 62, 64, 68, 82, 84, 86. a.12
15. 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. Rezolvare: 33333, 33335, 33337, 33353, 33355,…,77773, 77775, 77777. 16. 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. Rezolvare: 12347, 12346 ,12345 17. 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. Rezolvare: 11001, 11011, 11111.
18. 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. Rezolvare: 10349, 10523, 10527. 19. 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. Rezolvare: 35789, 35689, 35679. 20. 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 Md. generarea tuturor permutărilor mulţimii M Raspuns: c.
21. 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 Raspuns: a. 22. 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 Raspuns: c. 23. 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 Raspuns: c. BC
24. Un program citeşte o valoare naturală nenulă impară pentru n şi apoi generează şi afişeazăîn ordine crescătoare lexicografic toate combinaţiile formate din n cifre care îndeplinesc următoarele proprietăţi: - încep şi se termină cu 0; - modulul diferenţei între oricare două cifre alăturate dintr-o combinaţie este 1. Astfel, pentru n=5, combinaţiile afişate sunt, în ordine, următoarele: 01010,01210. Dacăse rulează acest program şi se citeşte pentru n valoarea 7, imediat după combinaţia 0101210 va fi afişată combinaţia: • 0121210 b. 0123210 c. 0111210 d. 0121010 Raspuns: d. 0121010 25. Pentru generarea numerelor cu n cifre formate cu elementele mulţimii {0,2,9} se utilizează un algoritm backtracking care, pentru n=2, generează, în ordine, numerele 20,22,29,90,92,99.Dacă n=4 şi se utilizează acelaşi algoritm, care este numărul generat imediat după numărul 2009? • 2002 b. 2020 c. 2090 d. 2010 Raspuns: b. 2020
26. Pentru generarea în ordine crescătoare a numerelor cu n cifre formate cu elementele mulţimii {0,2,8} se utilizează un algoritm backtracking care, pentru n=2, generează, în ordine, numerele 20,22,28,80,82,88. Dacă n=4 şi se utilizează acelaşi algoritm, precizaţi câte numere generate sunt divizibile cu 100? • 8 b. 90 c. 6 d. 10 Raspuns: 2000, 2200, 2800, 8000, 8200, 8800. c.6.