Заполнить шахматную доску числами

Обновлено: 02.05.2024

Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.

Рабочие листы и материалы для учителей и воспитателей

Более 2 500 дидактических материалов для школьного и домашнего обучения

Столичный центр образовательных технологий г. Москва

Получите квалификацию учитель математики за 2 месяца

от 3 170 руб. 1900 руб.

Количество часов 300 ч. / 600 ч.

Успеть записаться со скидкой

Форма обучения дистанционная

  • Онлайн
    формат
  • Диплом
    гособразца
  • Помощь в трудоустройстве

Видеолекции для
профессионалов

  • Свидетельства для портфолио
  • Вечный доступ за 120 рублей
  • 311 видеолекции для каждого

Выберите документ из архива для просмотра:

Выбранный для просмотра документ конф ШАХМАТ.docx

Министерство образования и науки Амурской области

муниципальное образовательное автономное учреждение

средняя общеобразовательная школа № 2

Математики и шахматисты

ученик 5 Д класса

Ширшова Е. В., учитель

математики МОБУ СОШ № 2

История возникновения шахмат

Математика и шахматы

Математики и шахматисты

Я уже давно играю в шахматы. Эта игра привлекает меня тем, что для победы необходимо логически мыслить, просчитывать комбинации на несколько ходов вперед и быть предельно внимательным. И в математике не обойтись без логики и точного расчета. А взаимосвязаны ли игра и наука? Нужна ли математика, чтобы побеждать? Среди людей существует мнение, что шахматисты хорошие математики и наоборот, математики хорошо играют в шахматы.

Таким образом цель моей работы – доказать или опровергнуть эту мысль.

На основании изложенного, выдвину гипотезу:

предположим, что действительно все шахматисты хорошие математики, и все хорошие математики - хорошие шахматисты.

Исходя из цели и гипотезы определим задачи работы:

Изучить историю возникновения шахмат

Рассмотреть различные связи между математикой и шахматами

Познакомиться с биографией знаменитых шахматистов и великих математиков

Составить вопросы и провести опрос среди учеников и учителей школы

Проанализировать полученные результаты и сделать вывод.

История возникновения шахмат

http://ru.convdocs.org/pars_docs/refs/1/617/617_html_m84af695.jpg

Шахматы — древняя интеллектуальная игра, имеющая многовековую историю. Сейчас — одна из наиболее распространенных настольных игр.
В разных странах эта игра имеет свое название: в Англии — чесс ,в Испании — ахедрес, в Германии — шах, во Франции — эшек. Русское название происходит от персидского "шах мат" — властитель побежден.
Время возникновения шахмат неизвестно, и на эту тему постоянно разгораются споры. Все же, ученые сошлись в своих разногласиях, и пришли к выводу, что шахматы возникли в первом веке нашей эры в Северной Индии. Предполагают, что шахматы были прототипом различных воин и битв, но без кровопролития, и поэтому завоевали огромный интерес у правителей древних государств, где они могли сразиться друг с другом не причинив своему войску ни единой царапинки.
Существует также и легенда:
Когда индийский царь Шерам впервые познакомился с шахматами, он был

восхищён их своеобразием и обилием красивых комбинаций. Узнав, что мудрец, который изобрёл игру, является его поданным, царь позвал его,

чтобы лично наградить за гениальную выдумку.
Властелин пообещал выполнить любую просьбу мудреца, и был удивлен его скромностью, когда тот пожелал получить в награду пшеничные зерна. На первое поле шахматной доски - одно зерно, на второе - два, на каждое последующее вдвое больше зёрен, чем на предыдущее. Царь приказал побыстрее выдать изобретателю шахмат его ничтожную награду. Мудрец скромно потребовал 1 + 2 2 + 2 3 + 2 4 + … + 2 63 = 2 64 – 1 зерен.

Счетоводы магараджи работали всю ночь и только утром сообщили своему господину, что его повеление невыполнимо: такого количества зерна просто не было не только во всей Индии, но и на всей земле.[1]

Конечно, связь с математикой здесь несколько условна, однако неожиданная развязка истории наглядно иллюстрирует грандиозные математические возможности, скрывающиеся в шахматной игре.

Раз уж речь зашла о происхождении шахмат, то уместно привести еще одну гипотезу, использующую некоторые математические свойства доски. Согласно этой гипотезе шахматы произошли из так называемых магических квадратов.

Гипотезу, согласно которой шахматы произошли из магических квадратов, впервые высказал в XIX веке английский математик Кессон. [2]
Магический квадрат порядка n представляет собой квадратную таблицу n х n, заполненную целыми числами и обладающую следующим свойством: сумма чисел каждой строки, каждого столбца, а также двух главных диагоналей одна и та же. Для магических квадратов порядка 8 она равна 260.
Закономерность расположения чисел в магических квадратах придает им волшебную силу искусства.

Математика и шахматы

Что может быть общего у шахмат с математикой?

Во-первых, форма шахматной доски напоминает квадрат (8х8). Во-вторых, многие ходы выполняются с помощью различных расчётов, с помощью возможных линий и фигур. В-третьих, с помощью математики можно выполнить множество способов разрезания доски на различные геометрические фигуры. С помощью ходов коня можно заполнить шахматную доску числами от 1 до 64, так чтобы эти числа не повторялись.

Рассмотрим связь между шахматами и математикой. 4

Симметрия в шахматах

Симметрией обладает исходное расположение шахматных фигур.

Кроме этого, н а шахматной доске можно провести прямую, разделяющую левый и правый фланги доски (граница между вертикалями «d» и «e») или нижнюю и верхнею части (граница между четвертой и пятой горизонталями).

Если, скажем, белый конь стоит на с2, а черный на с7, то мы говорим, что эти кони расположены симметрично.

В данном случае мы можем говорить о таком математическом явлении, как осевая симметрия, где осями будут являться прямые, разделяющие фланги и горизонтали. Осями являются и большие диагонали.

Разнообразные мотивы симметрии встречаются на шахматной доске. С одной стороны, речь может идти о симметрии естественной, т. е. возникающей в процессе шахматной партии, а с другой стороны, - используемой в шахматных задачах и этюдах.

hello_html_m5fbd69c0.jpg

Система координат

На билетах в кино, цирк или театр дано описание того, где находится место владельца данного билета: номер ряда и номер места в этом ряду.

Описание того, где расположен тот или иной объект (предмет, место), называют его координатами . Так на билете номер ряда и номер места в ряду - координаты этого места.

А причем здесь шахматы? На шахматной доске тоже есть координаты. При профессиональной игре обычно ведут записи (обозначение фигур и координаты этих фигур).

Система координат используется не только в шахматах, но и в других играх, например морской бой и другие.

Математики и шахматисты

Итак, математика связана с шахматами.

Для более эффективной работы я решил узнать, как шахматисты относятся к математике и как математики относятся к шахматам.

Для этого я изучил биографии знаменитых шахматистов и великих математиков, решил узнать у сверстников, играют ли они в шахматы и как относятся к математике, для чего разработал вопросы анкеты и провел опрос среди учеников и учителей школы.

Мир шахмат не ограничивается только игрой в шахматы, даже если включить сюда все правила и приемы игры, историю соревнований, десятки и сотни имён гроссмейстеров и чемпионов, и т. д. Существует один из популярных жанров занимательной математики, к которому относятся математические игры, задачи и развлечения на шахматной доске. Этот жанр называется шахматной математикой.

Например, Леонард Эйлер занимался математической задачей на шахматной доске о ходе коня. [5]

Старинная задача о ходе шахматного коня:

Требуется обойти конем все 64 клетки шахматной доски так, чтобы на каждой клетке конь был только один раз и затем возвратился бы в клетку, из которой вышел.

Эта задача известна по крайней мере с XVIII века. Леонард Эйлер посвятил ей большую работу «Решение одного любопытного вопроса, который, кажется, не подчиняется никакому исследованию».

Метод Эйлера состоит в том, что сначала конь двигается по произвольному маршруту, пока не исчерпает все возможные ходы. Затем оставшиеся непройденными клетки добавляются в сделанный маршрут, после специальной перестановки его элементов. Подобное решение представлено на рисунке .

Леона́рд Э́йлер — швейцарский, немецкий и российский математик, внёсший значительный вклад в развитие математики, а также механики, физики, астрономии и ряда прикладных наук.

Леонард Эйлер родился 4 апреля 1707года в г. Базель (Швейцария), а умер в Санкт-Петербурге в возрасте 76 лет .[7]

Наряду с задачей о ходе коня, интересна задача о восьми ферзях, которая привлекала внимание другого великого математика – Карла Гаусса . 6

Сколькими способами можно расставить на доске восемь ферзей так, чтобы они не угрожали друг другу, т.е. никакие два не стояли на одной вертикали, горизонтали и диагонали?

Больше восьми мирных ферзей (как и ладей) на обычной доске расставить невозможно. Найти какое-нибудь расположение восьми ферзей, не угрожающих друг другу, легко (на рис. представлены четыре искомые расстановки). Значительно труднее подсчитать общее число расстановок, в чем, собственно, и состоит задача.

Гаусс заинтересовался задачей и нашел 72 решения. [5]

Карл Фридрих Гаусс (1777-1855) — немецкий математик, астроном, геодезист и физик, иностранный член-корреспондент (1802) и иностранный почетный член (1824) Петербургской АН.

Карл Гаусс родился 30 апреля 1777. Скончался 23 февраля 1855 в Геттингене , Ганноверское королевство, ныне Германия. Еще при жизни он был удостоен почетного титула «принц математиков». Он был единственным сыном бедных родителей. Школьные учителя были так поражены его математическими и лингвистическими способностями, что обратились к герцогу Брауншвейгскому с просьбой о поддержке, и герцог дал деньги на продолжение обучения в школе и в Геттингенском университете (в 1795-98). Степень доктора Гаусс получил в 1799 в университете Хельмштедта. [7]

Многие математики решали и решают головоломки на шахматной доске.

Задача о ферзях – часовых . Около каждой тюремной камеры можно поставить часового. Находясь у одной из камер, часовой видит, что происходит в некоторых других, от которых к данной ведут коридоры. Каково наименьшее число часовых, необходимое для наблюдения за всеми камерами?

Если шахматную доску рассматривать как тюрьму (да простят нам шахматисты такую аналогию), причем ее поля считать камерами, а вертикали, горизонтали и диагонали – коридорами, то «часовыми» естественнее всего назначить ферзей, которые могут вести наблюдение в

любых направлениях. При этом задача о часовых приобретает следующую шахматную формулировку.

Какое наименьшее число ферзей можно расставить на доске так, чтобы они держали под обстрелом все ее свободные поля?

Итак, для охраны обычной доски требуется пять ферзей-часовых. Как бы мы ни расставляли четыре ферзя, по меньшей мере два поля доски останутся без присмотра. [3]

Не только математики интересуются шахматами, но и шахматисты связаны с математикой: либо профессия, либо хобби.

Эйве родился 20 августа 1901г. в г. Ватерграфсмер, умер 26 ноября 1981 в Амстердаме. 5-й в истории шахмат чемпион мира (1935 - 1937), международный гроссмейстер, международный арбитр, Президент ФИДЕ (1970 - 1978). Шахматный литератор. Доктор математики; преподаватель математики , механики и астрономии в лицее Амстердама. [7]

Роберт Фишер родился 9 марта 1943года в Чикаго. Отец – немец, мать – Швейцарская еврейка. Когда мальчику исполнилось два года, отец оставил семью, вернувшись в Германию, а мать с детьми переехала в Бруклин. В 6 лет сестра научила Роберта играть в шахматы. В нем сразу проявился природный дар к шахматам, который мальчик активно развивал. С самых юных лет Фишер привлекал к себе внимание не только феноменальными шахматными успехами. Он стал известен и своими неординарными, часто скандальными публичными заявлениями. Так, например, о школе подросток отозвался следующим образом: «В школе нечему учиться. Учителя глупы. Нельзя, чтобы учителями работали женщины. В моей школе только учитель физкультуры был не глуп – он неплохо играл в шахматы». [7]

Евгений Левин родился 26 июня 1990 года. В 16 лет стал мастером ФИДЕ (Международная шахматная федерация), а сейчас уже известный гроссмейстер.

Когда он учился в школе, математика не была его любимым предметом. Давая интервью газете «Правда Севера» в 2005г, обучаясь в 10 классе, Евгений признался: «Тяжело догонять школьную программу. Считается, что шахматисты должны «дружить» с математикой, но у меня все наоборот: я больше в гуманитарных предметах разбираюсь. А в математике и физике – не очень. Свое будущее собираюсь связать с шахматами, но обязательно планирую получить высшее образование, скорее всего связанное с языками.»

Оказывается, много математиков, которые любят разгадывать шахматные загадки, но далеко не все шахматисты предпочитают решать математические задачи, как и не все математики любители шахмат.

Исследование

Для более точного исследования своего предположения я решил узнать у учеников и учителей школы, играют ли они в шахматы и как относятся к математике. Для этого разработал вопросы анкеты и провёл опрос.

В опросе участвовало 81 человек. Это ученики 5, 7, 10 классов и учителя нашей школы. Вот какие интересные результаты я получил:

Анкета и результаты

1 . На сколько хорошо знаком с игрой в шахматы?

а) только слышал об этой игре - 18 б) знаю ходы некоторых фигур - 38

в) уверенно играю с друзьями - 22 г) участвую в шахматных турнирах- 3

2 . Чем привлекает игра?

«умением просчитывать ходы наперед», «выигрывать, побеждать», «математически просчитывающими ходами», «азартно», «эта игра на смекалку», « мне нравиться вырабатывать стратегию игры», «в этой игре нужно думать», «шахматы учат думать и быстро принимать решения»

3 .Любишь ли (любил ли) математику?

а) да - 54 б) нет 8 в) не очень- 19

4 . Чем привлекает эта наука?

«краткостью, логикой», «нравится решать задачи»,

«люблю считать», «сложные задачи – гимнастика для ума, получаешь кайф, получив верный ответ», «эта наука учит мыслить, думать, соображать»

5 . Как предпочитаешь решать свои проблемы?

а) обращусь к друзьям, родителям – они помогут - 21

б) иду за советом, но решение принимаю сам - 21

в) свои проблемы предпочитаю решать сам - 39

6 . С каким высказыванием согласишься

а) все математики являются хорошими шахматистами - 20

б) шахматисты хорошо знают математику - 12

в) ни с одним - 49

Умеют играть в шахматы лишь 25 человек, из них математику любят 12 человек , пятеро - не любят, 9чел. - не очень любят. Заниматься математикой предпочитают 54 человека, среди которых 38 человек не умеют играть в шахматы. Значит, далеко не все математики играют в шахматы, но почти все шахматисты любят математику.

17 опрошенных шахматистов свои проблемы предпочитают решать самостоятельно, остальные сначала советуются. Из математиков свои проблемы решают самостоятельно 15 , а 10 – советуясь. Все остальные перекладывают свои проблемы на других.

И игра в шахматы, и занятие математикой учат мыслить, думать, принимать решения. Только шахматы – это игра, удовольствие, а занятие математикой –необходимость.

В самом начале своей работы я поставил себе цель: доказать или опровергнуть существующее мнение, что шахматисты хорошие математики и наоборот, математики хорошо играют в шахматы; взаимосвязаны ли игра и наука.

Я считаю, что взаимосвязь шахмат и математики доказана на примерах.

Что главное в шахматной партии? Сложно ответить однозначно на этот вопрос, но я думаю, что это идея! Да, именно идея, и ни что другое. Именно идея важна и при решении сложных математических задач.

Анализируя ответы на 2-ой и 4-ый вопросы анкеты, можно заметить похожие фразы: «эта наука учит мыслить, думать, соображать», «шахматы учат думать и быстро принимать решения», «математически просчитывающими ходами».

Познакомившись с биографиями шахматистов и математиков, и сравнив результаты анкеты, я считаю, что живущая в народе мысль об игроках и ученых не доказана. 49 человек не согласились ни с одним высказыванием (анкета).

Математика помогает шахматистам играть и выигрывать. А шахматы в свою очередь помогают нам решать простейшие и даже самые сложные математические задачи, помогают развивать логику, внимание и таким образом знать математику на пять.

Однако не обязательно быть математиком, чтобы хорошо играть в шахматы и наоборот.

Из книги «Последние шахматные лекции Капабланки»:

Шахматы - нечто большее, чем просто игра. Это интеллектуальное времяпрепровождение. Я считаю, что шахматы следовало бы включить в школьные программы во всех странах.

Из статьи Н. Майданской "Место действия - школа: Дорогу шахматному всеобучу", 1983:

Что дают детям уроки шахмат? Что принесли с собой в школу шахматы? Повысилась успеваемость по всем предметам. А. Фланчик, учитель начальных классов: "Убеждена, что предметное преподавание шахмат в начальной школе необходимо. Ребята становятся вдумчивее, внимательнее, а их ответы - интереснее, разнообразнее".

Я обязательно буду продолжать играть в шахматы и заниматься математикой, так как это дисциплинирует ум, учит логическому мышлению.

Даны два числа n и m. Создайте двумерный массив размером n×m и заполните его символами 1 и 0 в шахматном порядке. В левом верхнем углу должна стоять единица.

A = [текст генератора]

Ответ:

n, m = map(int, input().split())

A = [['10'[(j + i) % 2] for j in range(m)] for i in range(n)]

for i in range(n):

for j in range(m):

Объяснение:

Новые вопросы в Информатика

80 баллов! задача: сделать сохранение кол-ва очков и вывод их кол-ва при каждом выигрыше. код, в который нужно добавить: x="сто" while x !='стоп': fr … om random import randint print('если хотите выйти, введите "стоп"') x=input('введите текст:') if x=="стоп": print('вы выходите') break else: print("введите число") b=int(input()) a=(randint(0,10)) while a is not b: if b 10: print('дурак?') elif b>a: print('меньше') b=int(input()) print('верно')

Прошу це на Pyton скласти програму введення елементів масиву через пробіл,підрахувати скільки в масиві є додатних і скільки відємних елементів .Підрах … увати і ввести кількість і суму додатних і кількість і суму відємних елементів

Визначте значення змінної a після виконання фрагмента програми, якщо a=7, b=3 :if a>b: writeln(a) else writeln(b);

Побудуйте математичну модель і створить проект для обчислення маси бруска, що має форму прямокутного паралепіпеда з вимірами a,b,c. Надайте можливість … користувачу вибрати матеріал, з якого виготовлене тіло за допомогою відповідного перемикача

Побудуйте математичну модель і створить проект для обчислення маси бруска, що має форму прямокутного паралепіпеда з вимірами a,b,c. Надайте можливість … користувачу вибрати матеріал, з якого виготовлене тіло за допомогою відповідного перемикача

Прошу це на Python. Задано чотири натуральних числа a, b, c, d. Знайдіть квадрат будь якого із заданих чисел (тобто піднесіть до квадрату будь яке з в … ведених чисел), якщо існує квадрат з довжинами сторін a, b, c, d та No у протилежному випадку.

Яким буде результат виконання фрагменту програми при N=0: Case N of 1, 2, 3 : WriteLn('Потрібно навчатись краще!'); 4, 5, 6 : WriteLn('Намагайся працю … вати краще!'); 7, 8, 9 : WriteLn('Це вже не погано!'); 10, 11, 12 : WriteLn('Молодець!'); Else WriteLn('Такої оцінки не має!')

Появление колонии микроорганизмов данного вида в определенных условиях оценивается вероятностью 0.8. Какова вероятность того, что из 4-х случаев эта к … олония появится не менее трех раз. Срочно, дам 50 баллов

Достаточно простая, но тем не менее интересная задача для разминки программиста. Думаю, все видели, как выглядит шахматная доска, а также слышали выражение «расставить в шахматном порядке». На случай, если не видели, это поле, состоящее размером 8 на 8 клеток, имеющих разные цвета – черный и белый. При этом, клетки одного цвета не могут быть смежными, а расположены через одну: белый, черный, белый… как по вертикали, так и по горизонтали.

Мы выведем в шахматном порядке восемь строк по восемь символов в каждой. Черный цвет у нас будет изображать символ «X», а белый – «O».

Самое первое, что приходит в голову:

  1. создать двумерный массив соответствующего размера;
  2. двойным циклом заполнить одним белым цветом все поля;
  3. затем можно запустить еще дополнительные циклы, которые будут обходить нужные клетки и назначать «черный» цвет.

Отмечу, что код примера реализован в синтаксисе языка Pascal, но постараюсь писать как можно более универсально, чтобы можно было легко перевести на любой язык программирования. В итоге, самое сложное, что я мог придумать для реализации такого неоптимального алгоритма выглядит следующим образом:

Пример выше, свою задачу выполняет, но код очень громоздкий. Чтобы заполнить все нужные ячейки, приходится использовать два отдельных присвоения значения как бы в разных плоскостях.

Если подойти к задаче более творчески, можно найти более интересное решение. Для этого достаточно заметить закономерности в расположении клеток. Все они идут через одну по вертикали и по горизонтали. То есть, одноцветные не могут быть рядом. Если присмотреться еще внимательнее, можно заметить еще одну очевидную вещь: номер каждой клетки как по вертикали, так и по горизонтали может быть как четным, так и нечетным. Но главное, что номер каждой «белой» клетки будет одновременно четным или нечетным по каждому направлению. «Черные» клетки при этом будут всегда со разными значениями – одно четное, другое нечетное.

неч чет неч Чет
неч 0 X 0 X
чет X 0 X 0
неч 0 X 0 X
чет X 0 X 0

В итоге, задачу можно решить очень простым и коротким методом: двойной цикл и одно условие, которое будет определять одинаковы ли значения четности каждой клетки.

Большинство задач можно решить различными способами. Работа же программиста найти наиболее функциональный и грамотный метод, позволяющий выполнить поставленную задачу наиболее эффективным путем.

Часто в задачах приходится хранить прямоугольные таблицы с данными. Такие таблицы называются матрицами или двумерными массивами. В языке программирования Питон таблицу можно представить в виде списка строк, каждый элемент которого является в свою очередь списком, например, чисел. Например, создать числовую таблицу из двух строк и трех столбцов можно так:

Здесь первая строка списка A[0] является списком из чисел [1, 2, 3] . То есть A[0][0] == 1 , значение A[0][1] == 2 , A[0][2] == 3 , A[1][0] == 4 , A[1][1] == 5 , A[1][2] == 6 .

Для обработки и вывода списка как правило используется два вложенных цикла. Первый цикл по номеру строки, второй цикл по элементам внутри строки. Например, вывести двумерный числовой список на экран построчно, разделяя числа пробелами внутри одной строки, можно так:

То же самое, но циклы не по индексу, а по значениям списка:

Естественно для вывода одной строки можно воспользоваться методом join :

Используем два вложенных цикла для подсчета суммы всех чисел в списке:

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

Создание списка

Пусть даны два числа: количество строк n и количество столбцов m . Необходимо создать список размером n × m , заполненный нулями.

Очевидное решение оказывается неверным:

В этом легко убедиться, если присвоить элементу A[0][0] значение 1 , а потом вывести значение другого элемента A[1][0] — оно тоже будет равно 1! Дело в том, что [0] * m возвращает ccылку на список из m нулей. Но последующее повторение этого элемента создает список из n элементов, которые являются ссылкой на один и тот же список (точно так же, как выполнение операции B = A для списков не создает новый список), поэтому все строки результирующего списка на самом деле являются одной и той же строкой.

Таким образом, двумерный список нельзя создавать при помощи операции повторения одной строки. Что же делать?

Первый способ: сначала создадим список из n элементов (для начала просто из n нулей). Затем сделаем каждый элемент списка ссылкой на другой одномерный список из m элементов:

Другой (но похожий) способ: создать пустой список, потом n раз добавить в него новый элемент, являющийся списком-строкой:

Ввод списка

Пусть программа получает на вход двумерный массив, в виде n строк, каждая из которых содержит m чисел, разделенных пробелами. Как их считать? Например, так:

Или, без использования сложных вложенных вызовов функций:

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

Пусть дан квадратный массив из n строк и n столбцов. Необходимо элементам, находящимся на главной диагонали, проходящей из левого верхнего угла в правый нижний (то есть тем элементам A[i][j] , для которых i==j ) присвоить значение 1 , элементам, находящимся выше главной диагонали – значение 0, элементам, находящимся ниже главной диагонали – значение 2. То есть получить такой массив (пример для n==4 ):

Рассмотрим несколько способов решения этой задачи. Элементы, которые лежат выше главной диагонали – это элементы A[i][j] , для которых ij . Таким образом, мы можем сравнивать значения i и j и по ним определять значение A[i][j] . Получаем следующий алгоритм:

Данный алгоритм плох, поскольку выполняет одну или две инструкции if для обработки каждого элемента. Если мы усложним алгоритм, то мы сможем обойтись вообще без условных инструкций.

Сначала заполним главную диагональ, для чего нам понадобится один цикл:

Затем заполним значением 0 все элементы выше главной диагонали, для чего нам понадобится в каждой из строк с номером i присвоить значение элементам A[i][j] для j = i+1 , . n-1 . Здесь нам понадобятся вложенные циклы:

Аналогично присваиваем значение 2 элементам A[i][j] для j = 0 , . i-1 :

Можно также внешние циклы объединить в один и получить еще одно, более компактное решение:

А вот такое решение использует операцию повторения списков для построения очередной строки списка. i -я строка списка состоит из i чисел 2 , затем идет одно число 1 , затем идет n-i-1 число 0 :

Упражнения

A: Максимум

Найдите индексы первого вхождения максимального элемента. Выведите два числа: номер строки и номер столбца, в которых стоит наибольший элемент в двумерном массиве. Если таких элементов несколько, то выводится тот, у которого меньше номер строки, а если номера строк равны то тот, у которого меньше номер столбца.

Программа получает на вход размеры массива n и m , затем n строк по m чисел в каждой.

Ввод Вывод

B: Снежинка

Дано нечетное число n . Создайте двумерный массив из n × n элементов, заполнив его символами "." (каждый элемент массива является строкой из одного символа). Затем заполните символами "*" среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. В результате единицы в массиве должны образовывать изображение звездочки. Выведите полученный массив на экран, разделяя элементы массива пробелами.

Ввод Вывод

C: Шахматная доска

Даны два числа n и m . Создайте двумерный массив размером n×m и заполните его символами "." и "*" в шахматном порядке. В левом верхнем углу должна стоять точка.

Ввод Вывод

D: Диагонали параллельные главной

Дано число n . Создайте массив размером n×n и заполните его по следующему правилу. На главной диагонали должны быть записаны числа 0. На двух диагоналях, прилегающих к главной, числа 1. На следующих двух диагоналях числа 2, и т.д.

Ввод Вывод

E: Побочная диагональ

Дано число n . Создайте массив размером n×n и заполните его по следующему правилу:

Числа на диагонали, идущей из правого верхнего в левый нижний угол равны 1.

Числа, стоящие выше этой диагонали, равны 0.

Числа, стоящие ниже этой диагонали, равны 2.

Полученный массив выведите на экран. Числа в строке разделяйте одним пробелом.

Ввод Вывод

F: Поменять столбцы

Дан двумерный массив и два числа: i и j . Поменяйте в массиве столбцы с номерами i и j и выведите результат.

Программа получает на вход размеры массива n и m , затем элементы массива, затем числа i и j .

Решение оформите в виде функции SwapColumns (A, i, j) .

Ввод Вывод

G: Симметричен ли массив?

Дано число n и массив размером n×n . Проверьте, является ли этот массив симметричным относительно главной диагонали. Выведите слово “ YES ”, если массив симметричный, и слово “ NO ” в противном случае.

Решение оформите в виде функции IsSymmetric(A) .

Ввод Вывод

H: k-я диагональ

Дан квадратный двумерный массив размером n×n и число k . Выведите элементы k -й по счету диагонали ниже главной диагонали (т.е. если k == 1 , то нужно вывести элементы первой диагонали, лежащей ниже главной, если k == 2 , то второй диагонали и т.д.).

Значение k может быть отрицательным, например, если k == -1 , то нужно вывести значение первой диагонали лежащей выше главной. Если k == 0 , то нужно вывести элементы главной диагонали.

Программа получает на вход число n , затем массив размером n×n , затем число k .

Ввод Вывод

I: Транспонировать прямоугольную матрицу

Дан двумерный массив размером n×m . Симметричный ему относительно главной диагонали массив называется транспонированным к данному. Он имеет размеры m×n : строки исходного массива становятся столбцами транспонированного, столбцы исходного массива становятся строками транспонированного.

Для данного массива постройте транспонированный массив и выведите его на экран. Решение оформите в виде функции Transpose (A) .

Ввод Вывод

J: Транспонировать квадратную матрицу

Дан двумерный массив размером n×n . Транспонируйте его и результат запишите в этот же масссив. Вспомогательный массив использовать нельзя. Решение оформите в виде функции Transpose (A) .

Ввод Вывод

K: Поменять две диагонали

Дан квадратный массив. Поменяйте местами элементы, стоящие на главной и побочной диагонали, при этом каждый элемент должен остаться в том же столбце (то есть в каждом столбце нужно поменять местами элемент на главной диагонали и на побочной диагонали).

Решение оформите в виде функции SwapDiagonals (A) .

Ввод Вывод

L: Кинотеатр

В кинотеатре n рядов по m мест в каждом. В двумерном массиве хранится информация о проданных билетах, число 1 означает, что билет на данное место уже продано, число 0 означает, что место свободно. Поступил запрос на продажу k билетов на соседние места в одном ряду. Определите, можно ли выполнить такой запрос.

Программа получает на вход числа n и m. Далее идет n строк, содержащих m чисел (0 или 1), разделенных пробелами. Затем дано число k.

Программа должна вывести номер ряда, в котором есть k подряд идущих свободных мест. Если таких рядов несколько, то выведите номер наименьшего подходящего ряда. Если подходящего ряда нет, выведите число 0.

Ввод Вывод

M: Треугольник Паскаля - 1

Даны два числа n и m. Создайте массив n×m и заполните его по следующим правилам:

Числа, стоящие в строке 0 или в столбце 0 равны 1 ( A[0][j] = 1 , A[i][0] = 1 ). Для всех остальных элементов массива A[i][j] = A[i-1][j] + A[i][j-1] , то есть каждый элемент равен сумме двух элементов, стоящих слева и сверху от него.

Выведите данный массив на экран, отводя на вывод каждого элемента массива ровно 6 символов (см. пример).

N: Треугольник Паскаля - 2

Треугольник Паскаля состоит из чисел, где каждое число равно двум числам, стоящим над ним. Если перенумеровать строки треугольника Паскаля с нуля, то \(i\)-я строка содержит \(i+1\) число, которые равны \(C_i^j\), где \(j\in[0,i]\).

По данному числу \(n\) создайте список из \(n\) строк, где \(i\)-й элемент списка должен быть списком, содержащим \(i+1\) число — элементы \(i\)-й строки треугольника Паскаля.

Заполните этот массив числами треугольника Паскаля. Выведите результат на экран отводя на вывод одного числа ровно 6 символов.

Ввод Вывод

O: Ходы коня

На шахматной доске стоит конь. Отметьте положение коня на доске и все клетки, которые бьет конь.

Программа получает на вход координаты коня на шахматной доске в шахматной нотации (то есть в виде “e4”, где сначала записывается номер столбца (буква от “a” до “h”, слева направо), затем номеру строки (цифра от 1 до 8, снизу вверх).

Клетку, где стоит конь, отметьте буквой “K”, клетки, которые бьет конь, отметьте символами “*”, остальные клетки заполните точками.

Выведите на экран изображение доски.

Ввод Вывод

P: Ходы ферзя

Решите предыдущую задачу для ферзя. Ферзь обозначается буквой “Q”.

Ввод Вывод

Q: Заполнение змейкой

По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m “змейкой”, как показано в примере. Выведите полученный массив, отводя на вывод каждого элемента ровно 4 символа.

Ввод Вывод

R: Заполнение диагоналями

По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m “диагоналями”, как показано в примере. Выведите полученный массив, отводя на вывод каждого элемента ровно 4 символа.

Ввод Вывод

S: Поворот прямоугольного массива

Дан прямоугольный массив размером n×m. Поверните его на 90 градусов по часовой стрелке, записав результат в новый массив размером m×n.

Выведите получившийся массив. Числа при выводе разделяйте одним пробелом.

Ввод Вывод

T: Поворот квадратного массива

Дан квадратный массив. Поверните его на 90 градусов по часовой стрелке. Результат запишите в этот же массив, вспомогательный массив использовать нельзя.

Выведите результат на экран, разделяя числа одним пробелом.

Ввод Вывод

U: Таблица умножения

Даны числа n и m. Создайте двумерый массив размером n×m и заполните его таблицей умножения по формуле A[i][j] = i * j . При заполнении массива нельзя использовать вложенные циклы.

Выведите получившийся массив на экран (при выводе можно использовать вложенные циклы), отводя на вывод каждого числа ровно 4 символа.

Ввод Вывод

V: Заполнение в шахматном порядке

Даны числа n и m. Заполните массив размером n×m в шахматном порядке: клетки одного цвета заполнены нулями, а другого цвета - заполнены числами натурального ряда сверху вниз, слева направо. В левом верхнем углу записано число 1.

Выведите полученный массив на экран, отводя на вывод каждого элемента ровно 4 символа.

Ввод Вывод

W: Заполнение спиралью

По данным числам n и m заполните двумерный массив размером n×m числами от 1 до n×m по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке, как показано в примере. Выведите полученный массив, отводя на вывод каждого элемента ровно 4 символа.

Тесты к этой задаче закрытые.

X: Сапер

На поле для игры в сапер клеточки с минами обозначаются символом “*”, а в каждой пустой клеточке записано число от 0 до 8, равное количеству мин в 8 клетках, соседних с данной.

Дан список мин на поле. Постройте по данному списку изображение поля.

Программа получает на вход числа N и M - количество строк и столбцов на поле, а также количество мин на поле K. Далее идет K пар чисел - координат мин. Первое число - номер строки, второе число - номер столбца.

Выведите изображение поля на экран, клетки при выводе разделяйте одним пробелом.

Тесты к этой задаче закрытые.

Y: K-мерный список

Дано натуральное число \(k\). Сделайте \(k\)-мерный список размера 2 по каждому измерению, то есть общее число элементов в списке должно быть \(2^k\). Заполните список нулями.

Выведите результат при помощи функции print без дополнительного форматирования.

Ввод Вывод

Z: K-мерный список - 2

Дано натуральное число \(k\). Сделайте \(k\)-мерный список размера 2 по каждому измерению, то есть общее число элементов в списке должно быть \(2^k\).

Список заполните строковыми значениями по формуле: \[ A[i_1][i_2]. [i_k] = \mbox(i_1)+\mbox(i_2)+. +\mbox(i_k) \]

Обращаем Ваше внимание, что в соответствии с Федеральным законом N 273-ФЗ «Об образовании в Российской Федерации» в организациях, осуществляющих образовательную деятельность, организовывается обучение и воспитание обучающихся с ОВЗ как совместно с другими обучающимися, так и в отдельных классах или группах.

Рабочие листы и материалы для учителей и воспитателей

Более 2 500 дидактических материалов для школьного и домашнего обучения

Столичный центр образовательных технологий г. Москва

Получите квалификацию учитель математики за 2 месяца

от 3 170 руб. 1900 руб.

Количество часов 300 ч. / 600 ч.

Успеть записаться со скидкой

Форма обучения дистанционная

  • Онлайн
    формат
  • Диплом
    гособразца
  • Помощь в трудоустройстве

311 лекций для учителей,
воспитателей и психологов

Получите свидетельство
о просмотре прямо сейчас!

Работа с двумерными массивами

Вложенные генераторы

Научимся использовать вложенные генераторы для заполнения двумерных массивов по формулам, которые зависят от номера строки и номера столбца элемента.

Мы уже встречались с генератором, который позволяет заполнить двумерный массив нулями:

a = [[ 0 ] * m for i in range ( n )]

Можно модифицировать этот генератор таким образом, чтобы внутренний список, состоящий из m нулей, тоже создавался через генератор:

a = [[ 0 for j in range ( m )] for i in range ( n )]

Таким образом, мы получили два генератора, один из которых вложен в другой. Теперь, если в теле вложенного генератора вместо числа 0 записать какую-то формулу, зависящую от индексов i и j , то мы получим способ нетривиально заполнить наш двумерный массив. Ниже мы рассмотрим несколько примеров такого заполнения.

a = [[ j for j in range ( m )] for i in range ( n )]

Для n =3 , m =4 этот генератор заполнит двумерный массив следующим образом:

Пример 2

a = [[ i for j in range ( m )] for i in range ( n )]

Для n =3 , m =4 этот генератор заполнит двумерный массив так:

a = [[ i + j for j in range ( m )] for i in range ( n )]

Для n =3 , m =4 этот генератор заполнит двумерный массив следующим образом:

Пример 4

a = [[( int )( i == j ) for j in range ( m )] for i in range ( n )]

В этом генераторе выражение ( i == j ) равно True , если элемент расположен на диагонали, и равно False в противном случае. Если преобразовать это выражение к целочисленному типу ( int )( i == j ) , то в сгенерированной таблице на диагонали будут стоять единицы, а в остальных ячейках будут стоять нули.

Для n =3 , m =4 этот генератор заполнит двумерный массив следующим образом:

Диагонали, параллельные главной

Дано число n . Создайте массив размером n × n и заполните его по следующему правилу. На главной диагонали должны быть записаны числа 0 . На двух диагоналях, прилегающих к главной, числа 1 . На следующих двух диагоналях — числа 2 и т.д.

Вводится число n ≤ 20 .

Выходные данные

Выведите ответ на задачу.



Заполнение змейкой

По данным числам n и m заполните двумерный массив размером n × m числами от 1 до n × m “змейкой”, как показано в примере.

Вводятся два числа n ≤ 40 и m ≤ 40 .

Выходные данные

Выведите полученный массив.



Шахматная доска

Даны два числа n и m . Создайте двумерный массив размером n × m и заполните его символами 1 и 0 в шахматном порядке. В левом верхнем углу должна стоять единица.



Слева направо, сверху вниз

Даны два числа n и m . Создайте двумерный массив размером n × m и заполните его в соответствии с примером.

Сверху вниз, слева направо

Даны два числа n и m . Создайте двумерный массив размером n × m и заполните его в соответствии с примером.



Квадранты

Дано число n . Создайте массив размером n × n и заполните его по следующему правилу. На главной и побочных диагоналях стоят нули, эти диагонали делят массив на четыре части. В верхней части записаны единицы, в правой записаны двойки, в нижней записаны тройки, в левой записаны четверки.

Маршруты на клетчатом поле

Рассмотрим следующую задачу. Дана прямоугольная доска из n строк и m столбцов. В левом верхнем углу этой доски находится фишка, которую необходимо переместить в правый нижний угол. За один ход фишку разрешается передвинуть на одну клетку вниз или одну клетку вправо. Необходимо определить, сколько существует различных маршрутов фишки, ведущих из левого верхнего в правый нижний угол.

Будем считать, что положение фишки задаётся парой чисел ( i , j ) , где i — номер строки, а j — номер столбца. Строки нумеруются сверху вниз от 0 до n −1 , а столбцы — слева направо от 0 до m −1 . Таким образом, первоначальное положение фишки — клетка (0,0) , а конечное — клетка ( n −1, m −1) .

Пусть w ( i , j ) — количество маршрутов, ведущих в клетку ( i , j ) из начальной клетки. Запишем рекуррентное соотношение. В клетку ( i , j ) можно прийти двумя способами: из клетки ( i , j −1) , расположенной слева, и из клетки ( i −1, j ) , расположенной сверху от данной. Поэтому количество маршрутов, ведущих в клетку ( i , j ) , равно сумме количеств маршрутов, ведущих в клетку слева и сверху от неё. Получили рекуррентное соотношение:

w ( i , j )= w ( i , j −1)+ w ( i −1, j )

Это соотношение верно при i >0 и j >0 . Зададим начальные значения: если i =0 , то клетка расположена на верхнем краю доски и прийти в неё можно единственным способом — двигаясь только вправо, поэтому w (0, j )=1 для всех 0≤ j < m . Аналогично, w ( i ,0)=1 для всех 0≤ i < n .

Создадим массив w для хранения значений функции, заполним первую строку и первый столбец единицами, а затем заполним все остальные элементы массива, используя рекуррентную формулу. Поскольку каждый элемент равен сумме значений, стоящих слева и сверху, заполнять массив w будем по строкам сверху вниз, а каждую строку — слева направо.

В результате такого заполнения получим следующий массив (пример для n =4 , m =5 ):

Код на языке Python, решающий эту задачу, будет выглядеть следующим образом:

n , m = map ( int , input () . split())

w = [[ 1 ] * m for i in range ( n )]

for i in range ( 1 , n ) :

for j in range ( 1 , m ) :

w [ i ][ j ] = w [ i ][ j - 1 ] + w [ i - 1 ][ j ]

print ( w [ - 1 ][ - 1 ])

Маршруты на клетчатом поле с дополнительными ограничениями

Теперь решим эту задачу с дополнительным ограничением — некоторые клетки таблицы запрещены для посещения фишкой. В этой задаче нам дополнительно даётся таблица t размера n на m состоящая из 0 и 1 . Если t ( i , j )=0 , то в клетку ( i , j ) перемещать фишку запрещено. Гарантируется, что t (0,0)=1 .

Будем решать эту задачу аналогично предыдущей. Изменение состоит в том, что есть клетки, в которые мы не можем перемещать фишку. Формально можно записать, что если t ( i , j )=0 , то w ( i , j )=0 . Если же t ( i , j )=1 , то w ( i , j )= w ( i , j −1)+ w ( i −1, j ) . Можно объединить эти два случая в одну формулу следующим образом:

w ( i , j )= t ( i , j ) ⋅ ( w ( i , j −1)+ w ( i −1, j ))

Также следует более внимательно заполнить первый столбец и первую строку таблицы w , так как теперь не во всех клетках первого столбца и первой строки обязательно будут стоять единицы.

Код, решающий эту задачу, будет выглядеть следующим образом:

n , m = map ( int , input () . split())

t = [ list ( map ( int , input () . split())) for i in range ( n )]

w = [[ 1 ] * m for i in range ( n )]

for i in range ( 1 , n ) :

w [ i ][ 0 ] = t [ i ][ 0 ] * w [ i - 1 ][ 0 ]

for j in range ( 1 , m ) :

w [ 0 ][ j ] = t [ 0 ][ j ] * w [ 0 ][ j - 1 ]

for i in range ( 1 , n ) :

for j in range ( 1 , m ) :

w [ i ][ j ] = t [ i ][ j ] * ( w [ i ][ j - 1 ] + w [ i - 1 ][ j ])

print ( w [ - 1 ][ - 1 ])

Количество маршрутов в прямоугольной таблице

В прямоугольной таблице N × M вначале игрок находится в левой верхней клетке. За один ход ему разрешается перемещаться в соседнюю клетку либо вправо, либо вниз (влево и вверх перемещаться запрещено). Посчитайте, сколько есть способов у игрока попасть в правую нижнюю клетку.

Вводятся два числа N и M — размеры таблицы 1 ≤ N ≤ 10 , 1 ≤ M ≤ 10 .

Выходные данные

Выведите искомое количество способов.

Cамый дешёвый путь

В каждой клетке прямоугольной таблицы N × M записано некоторое число. Изначально игрок находится в левой верхней клетке. За один ход ему разрешается перемещаться в соседнюю клетку либо вправо, либо вниз (влево и вверх перемещаться запрещено). При проходе через клетку с игрока берут столько килограммов еды, какое число записано в этой клетке (еду берут также за первую и последнюю клетки его пути).

Требуется найти минимальный вес еды в килограммах, отдав которую игрок может попасть в правый нижний угол.

Вводятся два числа N и M — размеры таблицы 1≤ N ≤20,1≤ M ≤20 . Затем идёт N строк по M чисел в каждой — размеры штрафов в килограммах за прохождение через соответствующие клетки (числа от 0 до 100 ).

Выходные данные

Выведите минимальный вес еды в килограммах, отдав которую можно попасть в правый нижний угол.



Шашку — в дамки

На шахматной доске ( 8 × 8 ) стоит одна белая шашка. Сколькими способами она может пройти в дамки?

(Белая шашка ходит по диагонали. на одну клетку вверх - вправо или вверх -влево. Шашка проходит в дамки, если попадает на верхнюю горизонталь.)

Вводятся два числа от 1 до 8 : номер столбца (считая слева) и строки (считая снизу), где изначально стоит шашка.

Выходные данные

Вывести одно число — количество путей в дамки.



Задача 10

Вывести маршрут максимальной стоимости

В левом верхнем углу прямоугольной таблицы размером N × M находится черепашка. В каждой клетке таблицы записано некоторое число. Черепашка может перемещаться вправо или вниз, при этом маршрут черепашки заканчивается в правом нижнем углу таблицы.

Подсчитаем сумму чисел, записанных в клетках, через которую проползла черепашка (включая начальную и конечную клетку). Найдите наибольшее возможное значение этой суммы и маршрут, на котором достигается эта сумма.

В первой строке входных данных записаны два натуральных числа N и M , не превосходящих 100 — размеры таблицы. Далее идут N строк, каждая из которых содержит M чисел, разделенных пробелами — описание таблицы. Все числа в клетках таблицы целые и могут принимать значения от 0 до 100 .

Выходные данные

Первая строка выходных данных содержит максимальную возможную сумму, вторая — маршрут, на котором достигается эта сумма. Маршрут выводится в виде последовательности, которая должна содержать N − 1 букву D, означающую передвижение вниз и M − 1 букву R, означающую передвижение направо. Если таких последовательностей несколько, необходимо вывести ровно одну (любую) из них.

Читайте также: