Două-dimensionale matrice
Prelucrarea și de ieșire a listelor imbricate
Adesea, problemele trebuie să păstreze masa dreptunghiulara cu datele. Acestea sunt cunoscute ca matrice sau matrice bidimensionale. Tabelul de Python limbaj de programare poate fi reprezentat ca o listă de șiruri, din care fiecare element este la rândul său o listă, cum ar fi numere. De exemplu, pentru a crea un tabel numeric cu două rânduri și trei coloane, puteți:
Aici, primul rând al listei A [0] este o listă a numerelor [1, 2, 3]. Adică, [0] [0] == 1 Valoarea A [0] == 2. [0] [2] == 3. [1] [0] == 4. [1 [1] A ] [1] == 5. [1] [2] == 6.
Pentru a procesa și va afișa o listă folosește de obicei două bucle imbricate. Primul ciclu al numărului liniei, oa doua buclă prin interiorul liniei. De exemplu, o listă de afișare numerică bidimensională pe linia de ecran de linie, împărțind numărul de spații libere într-o singură linie, astfel încât să:
La fel, dar ciclurile nu sunt pe index, și pentru o listă de valori:
În mod firesc pentru o ieșire linie se poate utiliza metoda alăture.
Utilizați două bucle imbricate pentru a calcula suma tuturor numerelor din lista:
Sau același lucru cu un ciclu nu pe indicele, și valoarea șirului:
Crearea unei liste
Să presupunem că avem două numere: numărul n rânduri și numărul de coloane m. Este necesar să se creeze o listă de dimensiune n × m. umplut cu zerouri.
Soluția evidentă este greșită:
Acest lucru este ușor de văzut, dacă atribuiți un element A [0] [0] la 1 și apoi de ieșire valoarea unui alt element A [1] [0] - este, de asemenea, va fi egal cu 1! Faptul că [0] * m Ref revine la lista de m zerouri. Dar repetarea ulterioară a acestui element creează o listă de n elemente, care se referă la aceeași listă (același mod ca și operarea B = A pentru liste creează o nouă listă), astfel încât toate lista rezultată linii sunt de fapt unul și aceeași linie.
Astfel, o listă cu două dimensiuni nu pot fi create folosind operația de repetiție a unei linii. Ce să fac?
Prima metodă: În primul rând, creați o listă de n elemente (pentru începutul unei n zerouri). Apoi, face fiecare element al listei o trimitere la o altă listei m-dimensional de articole:
Diferite (dar similare) astfel: pentru a crea o listă goală, apoi de n ori adăuga un element nou, care este o listă de șiruri:
Introducerea listei
Să presupunem că programul primește ca intrare matrice bidimensională, sub formă de n rânduri cuprinzând fiecare m numere separate prin spații. Cum să le citească? De exemplu, ca aceasta:
Sau fără utilizarea de apeluri complexe de funcții imbricate:
Un exemplu complex de o serie de procesare
Să presupunem că avem o matrice pătrată de n rânduri și n coloane. Elementele necesare pe diagonala principală se întinde de la stânga sus spre colțul din dreapta jos (adică, elementele A [i] [j] căreia i == j.) Pentru a atribui valoarea 1 elemente, amplasate deasupra diagonalei principale - valoarea 0, elemente situate sub diagonala principală - valoarea 2. Aceasta este de a primi o matrice (de exemplu n == 4):
Considerăm mai multe moduri de a rezolva această problemă. Elementele care sunt deasupra diagonalei principale - elementele A [i] [j]. pentru care i
Acest algoritm este rău, pentru că efectuează una sau două în cazul în declarații pentru a procesa fiecare element. Dacă ne complica algoritmul, putem face fără instrucțiuni condiționale.
În primul rând, umple diagonala principala, pentru care avem nevoie de un ciclu:
Apoi umple valoarea 0, toate elementele deasupra diagonalei principale, pentru care este nevoie în fiecare dintre rânduri cu indicele i atribuit un element de valoare A [i] [j] pentru j = i + 1. n-1. Aici avem nevoie de bucle imbricate:
In mod similar, atribuirea unei valori de 2 elemente A [i] [j] pentru j = 0. i-1.
Puteți, de asemenea, bucle exterioare sunt combinate într-o singură și de a primi o altă soluție, mai compact:
Dar această decizie liste utilizează operațiune de repetiție pentru construirea unei alte linii a listei. i-lea rând din lista constă dintr-un număr i 2 este urmat apoi de un singur număr este 1. n-i-1 numărul 0.
exerciții
A: Maximum
Găsiți indicele prima apariție a elementului maxim. Print două numere: rândul și coloana număr, care este în valoare de cel mai mare element într-o matrice bidimensională. Dacă mai multe dintre aceste elemente, se afișează cel care este mai mic decât numărul liniei, iar în cazul în care numerele de linie sunt cel cu numărul mai mic al coloanei.
Programul are o serie de dimensiuni n și m. apoi n linii de m numere fiecare.
K: Schimbarea două diagonalele
Fiind dată o matrice pătrată. Elementele swap în picioare pe principal și secundar diagonalei, fiecare element trebuie să rămână în aceeași coloană (adică, fiecare coloană trebuie să fie schimbat un element de pe diagonala principală și secundară pe diagonală).
SwapDiagonals Solution a făcut într-o funcție (A).
L: Cinema
În cinema n rânduri cu m locuri fiecare. În bidimensional stochează informații despre matrice de bilete vândute, numărul 1 indică faptul că un bilet la acest loc au fost deja vândute, numărul de 0 înseamnă că locul este liber. Am primit o cerere pentru vânzarea de bilete pentru locurile k vecine, în același rând. Determina dacă este posibil să se efectueze o astfel de cerere.
Programul are un n întreg și m. Următorul este n linii care conțin m numere (0 sau 1), separate prin spații. Apoi, numărul k este dat.
Programul ar trebui să afișeze numărul rândului în care există k locuri goale consecutive. Dacă mai multe astfel de serie, imprimați cel mai mic număr de serii corespunzătoare. În cazul în care un număr adecvat de ieșire nu numărul 0.
triunghiul lui Pascal - 1: M
Având în vedere două numere n și m. Creați o matrice de n × m și umple-l cu următoarele reguli:
Număr de picioare în rândul 0 coloană 0 sau egal cu 1 (A [0] [j] = 1. [i] [0] = 1). Pentru toate celelalte elemente de vector A [i] [j] = A [i-1] [j] + A [i] [j-1]. adică fiecare element este suma celor două elemente în picioare pe stânga și deasupra ei.
matrice activă de ieșire de pe ecran, atribuind ieșirea fiecărui element de matrice exact 6 simboluri (vezi. Exemplu).
N: triunghi Pascal - 2
triunghiul lui Pascal este format din numere în care fiecare număr este de două numere, în picioare peste el. Dacă renumerotat Pascal linie triunghi de la zero, \ (i \) - th linie conține \ (i + 1 \) numărul care este egal cu \ (C_i ^ j \), în cazul în care \ (j \ în [0, i] \) .
Pentru un număr dat \ (n \), creați o listă de \ (n \) linii, în cazul în care \ (i \) - element al listei lea ar trebui să fie o listă conținând \ (i + 1 \) număr - elemente \ (i \) - d liniile triunghiul lui Pascal.
Umple numerele de matrice triunghiul lui Pascal. Ieșire rezultatul pe ecran pentru atribuirea de ieșire a unuia dintre exact 6 simboluri.
O: Transformă cal
Pe valoare de cal tablă de șah. Marcați poziția de cavaler de pe bord și toate celulele, care bate calul.
Programul primește coordonatele intrarea calului pe o tablă de șah în notația de șah (adică o „e4“, unde primul număr înregistrat al coloanei (literă de la „a“ la „h“, stânga), atunci numărul rândului (un număr la 1 la 8 , în sus).
Cell, în cazul în care există un cal, nota litera „K“, celula care are cal, marca „*“ simbol, celulele rămase sunt ocupate de puncte.
Afișează imaginea bord.
P: Se pare regina
Rezolva problema anterioară pentru regina. Regina notate cu litera „Q“.
Î: Se umple de șarpe
Conform numerelor n și m umple o matrice bidimensională de dimensiune m × n numere de la 1 la n x m „șarpe“, așa cum se arată în exemplul. Ieșire rezultată matrice, introducerea pe ieșirea fiecărui element de exact 4 caractere.
R: Umplerea diagonalelor
Conform numerelor n și m umple o matrice bidimensională de dimensiune m × n numere de la 1 la m × n „diagonalele“, așa cum este arătat în exemplu. Ieșire rezultată matrice, introducerea pe ieșirea fiecărui element de exact 4 caractere.
V: Completarea într-un mod eșalonat
Având în vedere numerele n și m. Umple o matrice de dimensiune n × m decalate: celulele de aceeași culoare sunt umplute cu zerouri, iar o alta culoare - umplut cu numere întregi pozitive de sus în jos, la stânga la dreapta. În colțul din stânga sus este scris numărul 1.
Ieșire rezultată matrice pe ecran, atribuind fiecărui element de ieșire exact 4 caractere.