Двуизмерни решетки

Обработка и изход на вложени списъци

Често проблемите трябва да се запази правоъгълна маса с данните. Те са известни като матрица или двуизмерни масиви. таблицата Python език за програмиране може да се представи под формата на списък от низове, всеки елемент от който на свой ред списък, като например номера. Например, за да се създаде числено маса с два реда и три колони, можете да:

Тук, първият ред на списъка А [0] е даден списък на номерата [1, 2, 3]. Това означава, [0] [0] == 1 стойност А [0] [1] == 2. [0] [2] == 3. [1] [0] == 4. [1 А ] [1] == 5. [1] [2] == 6.

За да се обработи и ще покаже списък обикновено използва два вложени цикъла. Първият цикъл на броя на линия, втората линия през вътрешността на линията. Например, двуизмерен числен списък показване на линията на екрана по ред, се раздели броят на заготовки в един ред, така че да:

Същото, но цикли не са в индекса, а за списък със стойности:

Естествено продължение на една линия изход може да използвате метода се присъединят.

Използвайте два вложени цикъла, за да се изчисли сумата на всички числа в списъка:

Или едно и също нещо с един цикъл не върху индекса, както и върху стойността на низа:

Създаване на списък

Да предположим, че са дадени две числа: броят на N редове и m брой колони. Необходимо е да се създаде списък на размера н × м. запълва с нули.

Очевидното решение е грешно:

Това се вижда лесно, ако зададете елемент [0] [0] до 1, а след това на изхода на стойността на друг елемент A [1] [0] - това също ще бъде равен на 1! Фактът, че [0] * м Реф връща в списъка на м нули. Но последвалата повторение на този елемент създава списък на наш елементи, които се отнасят до един и същ списък (същия начин като операция B = A за списъци създава нов списък), така че всички в резултат на списъка на линиите в действителност са едно и една и съща линия.

По този начин, двуизмерен списък не може да бъде създаден с помощта на операцията повторение на един ред. Какво да се прави?

Първият метод: Първо, да създадете списък с наш елементи (за начало на и н с нули). След това направи всеки елемент от списъка препратка към друг на м двумерен списък от въпроси:

Различни (но подобно) по следния начин: да се създаде празен списък, след което п пъти добавите нов елемент, който е даден списък от низове:

Въвеждане на списъка

Да предположим, че програмата получава като вход двумерен масив, под формата на N редове всяка съдържаща м цифри, разделени с интервали. Как да ги прочетете? Така например, по следния начин:

Или без използването на сложни вложени извиквания на функции:

Сложна пример за масив от обработка

Да предположим, че са дадени квадратна решетка на п и п редове колони. Необходими елементи на основната диагонала простира от горната лява до долния десен ъгъл (т.е. елементи А [Ь] [й], до която и == J.) За да определи стойност 1 елементи, разположени над главния диагонал - стойността 0, елементи, разположени под главната диагонал - стойността на 2. Това е да се получи масив (например п == 4):

Ние считаме, че няколко начина за решаване на този проблем. Елементите, които са над главния диагонал - елементите А [Ь] [й]. за които азк. По този начин, можем да сравним стойностите на аз и й, и за тях да се определи стойността на A [в] [к]. Ние се получи следния алгоритъм:

Този алгоритъм е лошо, защото изпълнява една или две, ако отчети за обработка на всеки елемент. Ако се усложни алгоритъма, което можем да направим, без условни инструкции.

На първо място, попълнете главния диагонал, за които ние се нуждаем от цикъл:

След запълване на стойност 0, всички елементи над главния диагонал, за които са необходими във всеки от редовете с индекс и присвоена стойност елементи А [Ь] [й] за J = + 1. N-1. Тук ние се нуждаем от вложени цикъла:

Аналогично, определянето на стойност от 2 елемента А [Ь] [й] за J = 0. I-1.

Можете също така външните контури са обединени в един и получават друга, по-компактно решение:

Но тази списъци решения използва операция повторение за изграждане на още един ред в списъка. I-та линия в списъка състои от определен брой и 2 след това е последвано от един номер е 1. п-и-1 числото 0.

упражнения

A: Максимална

Намери индексът на първата поява на максималния елемент. Печат две числа: Номерът на ред и колона, която е на стойност най-големият елемент в двумерен масив. Ако някои от тези елементи, се показва на този, който е по-малък от номера на реда, а ако номерата на редовете са този с по-малкия брой на колоната.

Програмата се масив от размери п и т. тогава п линии м номера всяка.

К: Променете два диагонала

При един квадратен масив. Размяна елементи, намиращи се върху основния и вторичния диагонала, всеки елемент трябва да останат в същата колона (т.е., всяка колона трябва да бъдат заменени с елемент на главната диагонала и на вторичния диагонал).

Решение SwapDiagonals направени в функция (A).

L: Кино

В киното н редове от М места всяка. В двумерен масив магазини информация за продадените билети, номер 1 показва, че билет за това място вече са продадени, броят на 0 означава, че мястото е свободно. Аз получи искане за продажба на билети за съседните к-те места в един и същи ред. Определете дали е възможно да се извърши такова искане.

Програмата се цяло число п и т. След това е п линии, съдържащи м номера (0 или 1), разделени с интервали. След това число К е дал.

Програмата трябва да се покаже номера на реда, в който има к последователни празни места. Ако няколко такива серии, отпечатайте най-малкият брой подходящ серия. Ако подходящ брой не изход числото 0.

М: Паскал триъгълник - 1

Като се има предвид две числа п и т. Създаване на масив от н × м и я напълнете със следните правила:

Брой стои в ред 0 колона 0, или равна на 1 (А [0] [J] = 1. [Ь] [0] = 1). За всички други елементи масив [Ь] [й] = A [I-1] [й] + A [Ь] [J-1]. т.е. всеки елемент е сумата от два елемента, намиращи се върху лявата и над него.

Изходна активен набор на екрана, чрез определяне на изхода на всеки елемент масив точно 6 символа (вж. Пример).

N: Pascal триъгълник - 2

триъгълник на Паскал се състои от числа, където всеки брой е две числа, стоящи над него. Ако предишна Паскал триъгълник линия от нулата, \ (I \) - тия ред съдържа \ (I + 1 \) броят на които е равен на \ (C_i ^ й \), където \ (к \ в [0, Ь] \) ,

За даден брой \ (п \), създаване на списък на \ (п \) линии, където \ (I \) - тия елемент на списъка трябва да бъде списък, съдържащ \ (I + 1 \) номер - елементи \ (I \) - г триъгълник на Паскал линии.

Попълнете номера на масив от триъгълника на Паскал. Изход от резултата на екрана за възлагане на изхода на един от точно 6 символа.

О: Включва кон

На кон струва шахматната дъска. Маркирайте позицията на рицаря на борда и всички клетки, което бие коня.

Програмата получава координатите на влизането на кон на шахматна дъска в шахматна нотация (т.е., "Е4", където първата записва броят на колоната (писмо от "а" до "з", ляво), след това броят на ред (редица 1-8 , нагоре).

Cell, където има кон, обърнете внимание на буквата "К", клетката, която е на коня, марка "*" символ, останалите клетки са пълни с точки.

Изведете изображението на борда.

P: Включва кралица

Решете предишния проблем за кралицата. Queen означена с буквата "В".

Q: Напълнете змия

Според номера пит запълни двумерен масив с размер m х п номера от 1 до п х m "змия", както е показано в примера. Изходен резултат масив, пускането на изхода на всеки елемент от точно 4 символа.

R: Пълнене на диагоналите

Според номера пит запълни двумерен масив с размер m х п номера от 1 до m х п "диагонали", както е показано в примера. Изходен резултат масив, пускането на изхода на всеки елемент от точно 4 символа.

V: Попълване на шахматно начин

Предвид числа п и т. Напълнете множество размер п х m шахматно: клетките от същия цвят са запълнени с нули, и друг цвят - пълни с положителни числа от горе до долу, от ляво на дясно. В горния ляв ъгъл е написано числото 1.

Изходен резултат масив на екрана, като за всеки изход елемент точно 4 символа.