Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paper.doc
Скачиваний:
10
Добавлен:
30.03.2015
Размер:
208.9 Кб
Скачать

12. Комбинаторика

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

  2. Получить все перестановки элементов 1…6. Например: 123456, 123465, 123546…654321.

  3. Получить все сочетания из 8 элементов по 3. Например: 123,124,125…876

  4. В данной последовательности действительных чисел а1, а2…аn выбрать возрастающую подпоследовательность наибольшей длины.

  5. Имеются n предметов, веса которых равны а1, а2,…аn.Разделить эти предметы на две группы так, чтобы общие веса групп были максимально близки. При решении необходимо перебрать все возможные варианты разделения на две группы.

  6. Задача о рюкзаке. Имеются n предметов, каждый из которых имеет вес и стоимость. Веса равны m1, m2…mn, а стоимости с1, с2…сn соответственно. Определить, какие из вещей необходимо положить в рюкзак, чтобы общий вес рюкзака не превышал 50 кг, а общая стоимость была максимальной? При решении необходимо перебрать все возможные варианты укладки вещей в рюкзак, не учитывая, естественно, порядок укладки вещей.

13.Численные методы.

  1. Дано действительное положительное число е. Методом деления отрезка пополам найти приближенное значение корня уравнения f(x)=0. Абсолютная погрешность найденного значения не должна превышать е (рядом с уравнением указан отрезок содержащий корень):

а)х+ln(x-0, 5)-0, 5=0, [0,2]

б) х2-х-0,2=0,[1, 1]

в)х4-2х3-х-1=0, [0, 1]

г)х3-0,2х2-0,2х-1,2=0, [1 ,1. 5]

  1. Написать программу решения системы линейных уравнений методом Гаусса:

a 11x1+a12x2+…+а1nxn=b1

………………………….

a n1x1+an2x2+…+annxn=bn

Предполагается, что система совместна и имеет единственное решение.

  1. Дана функция e=f(x), вычислить определенный интеграл на (а,b) по формулам численного интегрирования (методом трапеций) и по формуле Ньютона-Лейбница. Сравнить результаты:

а) у=1/х2

б)у=1/х

в) у=sin (x)

г)у=1/(1+х2)

14. Общие задачи.

  1. В процессе лечебного голодания вес пациента за 30 дней снизился с 96 до 70 кг. Было установлено, что ежедневные потери веса пропорциональны весу тела. Вычислить, чему был равен вес пациента через k дней после начала голодания?

  2. Числа Фибоначчи получили название в часть итальянского математика XIII века Леонардо Фибоначчи, который ввел наблюдения за численностью при размножении кроликов (без учета смертности, считая, что каждая новая пара дает приплод через два года после рождения). Внесите в эту модель уточнение, касающееся смертности, считая, что продолжительность жизни животного n лет.

  3. Шахматную доску будем представлять символичной матрицей размерами 8*8. Даны натуральные числа m и n (0<n<9, 0<m<9) – номера вертикали и горизонтали, определяющие местоположение ферзя. Соответствующий элемент матрицы надо положить равным ф. Поля, находящиеся под угрозой ферзя, надо положить равными *, а остальные поля-0.

  4. Шахматную доску будем представлять в виде символичной матрицы размерами 8*8. Даны натуральные числа m и n (0<n<9, 0<m<9) – номера вертикали и горизонтали, определяющие местоположение коня. Соответствующий элемент матрицы надо положить равным К. Поля, находящиеся под угрозой коня, надо положить равными *, а остальные поля -0.

  5. Шахматную доску будем представлять символьной матрицей размерами 8*8. Даны натуральные числа n1, n2, n3 и m1, m2, m3 (0<n<9, 0<m<9) – номера вертикали и горизонтали, определяющие местоположение короля, ферзя и ладьи. Необходимо ответить на вопросы:

    1. есть ли шах королю?

    2. есть ли мат королю?

    3. есть ли пат королю?

В варианте а) указать возможный ход королем.

  1. Дан номер года. Указать число дней в году. При решение задачи принять во внимание, что в современном (григорианском) календаре каждый год, номер которого делится без остатка на 4, является високосным, за исключением тех номеров, которые делятся на 100 и не делятся на 400. Например, високосные года: 4, 1008, 1940, 1984, 1600, 2000, не високосные года: 5, 1009, 1941, 1985, 1300, 1700.

  2. Даны натуральные числа a1, b1, c1, a2, b2, c2, которые указывают две даты (число, месяц, год). Вычислить количество дней, прошедших между этими датами. Принять во внимание наличие високосных лет.

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

  4. Чтобы зашифровать текст, написанный с помощью русских букв и знаков препинания, его можно переписать, заменив каждую букву непосредственно следующей за ней по алфавиту, этот код известен, как код Цезаря при смещении равном 4, (буква я заменяется на а):

    1. зашифровать данный текст;

    2. расшифровать данный текст;

  5. Пусть по некоторому каналу связи передается сообщение, имеющее вид последовательности нулей и единиц (или, аналогично, точек и тире). Из-за помех возможен ошибочный прием некоторых сигналов. Для предотвращения этого можно каждый сигнал передавать трижды, заменяя, например, последовательность 1, 0, 1 последовательностью 1, 1, 1, 0, 0, 0, 1, 1, 1. Три последовательные цифры при расшифровке заменяют той цифрой, которая встречается среди них, по крайней мере, дважды. Написать программу расшифровки.

  6. Написать программу игры в крестики-нолики на поле размерами 3*3. Игра с компьютером должна осуществляться путем ввода номера строки и столбца c клавиатуры.

  7. Напишите программу для аппроксимации множества точек x1 , x2 ….xn , y1 , y2 ….yn на плоскости полиномом n-ой степени.

  8. Игра моделирует жизнь поколений гипотетических колоний живых клеток, которые живут, погибают и размножаются по следующим правилам. Жизнь происходит на прямоугольном поле, разбитом на одинаковые квадраты (ячейки); размеры поля n*m. Соседом ячейки считается любая ячейка, расположенная рядом по вертикали, горизонтали или по любой диагонали. Таким образом, у любой ячейки имеется 8 соседних ячеек. Клетка погибает (от одиночества), если у нее менее двух соседей. Клетка погибает (от перенаселения), если у нее более трех соседей. В пустой ячейке зарождается жизнь, если у нее ровно три соседа. Смерть и рождение клеток происходит в момент смены поколения, поэтому, погибая или рождаясь, клетка не может способствовать гибели или рождению другой клетки в этом поколении. Написать программу, реализующую этот процесс [3].

  9. Написать следующую программу (Великий комбинатор). Один из игроков, загадывающий, записывает секретную комбинацию из любых четырех цифр от 1 до 6 (повторения допускаются), называемую кодом. Второй игрок, отгадывающий, пытается раскрыть код, высказывая разумные предположения, называемые пробами. Каждая проба, как и код, представляет собой произвольную комбинацию из четырех цифр в диапазоне от 1 до 6. Отгадывающий игрок сообщает пробу загадывающему, и тот должен ответить, сколько цифр в коде соответствует с цифрами кода, как по положению, так и по величине и сколько из основных цифр пробы входят в код, но стоят на другом месте. Так, на пробу 1123 при коде 4221 будет получен ответ: «Одна цифра совпадает и стоит на том же месте, и еще одна совпадает, но стоит на другом месте». Тур игры продолжается до тех пор, пока отгадывающий не назовет пробу, в точности совпадающую с кодом, т. е. пока не отгадает код. После этого игроки меняются ролями и проводят еще один тур. Победителем считается тот из игроков, кто определит код противника за меньшее число проб. Боб Кули и Д. Кнут разработали довольно близкие стратегии, позволяющие ЭВМ достигнуть высокого класса игры. Центральное место в обеих стратегиях занимает идея пространства решений. Начальное пространство решений Pо состоит из всех возможных кодов; после i-й пробы G1 пространство Pi состоит из всех тех членов пространства Pi-1, которые не опровергаются ответом R1. Иными словами, пространство Pi – это множество всех комбинаций, которые все еще могут быть кодом; задача отгадывающего – свести все пространство к одному элементу.

Первая стратегия, предложенная Кули, несколько проще. Пробой G1 пусть будет любая случайно выбранная комбинация с одной повторяющейся цифрой, например 4311, 6552 или 1335. Выполните эту пробу и постройте пространство P1 на основе ответа R1. Новая проба Gi+1 ищется по пространству Pi, i≥1, путем поочередного сравнения всех комбинаций С из Р1 с пробой Gi.

В качестве следующей пробы выбирается наименее похожая на Gi комбинация С. Мерой сходства служит число точных совпадений, а в случае равенства – число цифр, совпадающих по значению, но расположенных по другому. Так среди трех комбинаций 2641, 2356 и 1345 наиболее похожей на 2345 будет 1345, а 2641 – наименее похожей. Если имеется несколько наименее похожих комбинаций, то можно выбрать любую кандидатуру случайным образом. Тур прекращается, когда будет получен ответ «четыре точных попадания», и, разумеется, в случае пространства из одного элемента в качестве следующей пробы всегда надо брать этот элемент. Эта стратегия не требует более 6 проб.

Вторая стратегия предложена Дональдом Кнутом. Он утверждает, что она минимизирует наибольшее число проб, необходимых для нахождения кода; никакой код не требует более пяти проб, то есть лучше стратегии Б. Кули. В основе алгоритма лежит наблюдение, что нам хотелось бы сделать пространство Рi как можно меньше. Следовательно, мы выбираем пробу Gi, минимизирующую │Pi│ по всем возможным ответам Pi. Кандидатом в Gi будет любая комбинация С. Попробуйте применить все возможные комбинации С в качестве проб к пространству Рi-1; пусть Sc, <0,0> обозначает число членов Pi-1, дающих в ответе нулевое число точных совпадений и нулевое число совпадений по значению; Sc,<0,1> - число членов, дающих соответственно нуль и одно совпадение и т. д. до Sc,<4,0> для наиболее удачной комбинации с четырьмя точными совпадениями. Введем обозначение

Sc=max Sc,<I,j>.

<I,j>

Теперь в качестве пробы Gi выберите комбинацию С, минимизирующую Sc (при наличии нескольких таких С выберите комбинацию из Pi-1, если это возможно; если же нет – делайте случайный выбор). Вы, вероятно, уже заметили, что этот алгоритм можно использовать для предварительного анализа великого комбинатора, так чтобы в процессе игры не был нужен никакой анализ комбинаций. Проделав такой анализ, Кнут показал, что оптимальной первой пробой при использовании его стратегии будет xxyy,где x≠y. Для проверки своей программы посмотрите начинает ли она с пробы xxyy.

Напишите программу, которая будет разыгрывать партии великого комбинатора. Реализуйте стратегию отгадывания, так чтобы машина могла загадывать коды и отгадывать их. Кроме собственно игры ваша программа может накапливать сведения о мастерстве разных игроков[3].

  1. Напишите программу, печатающую копию собственного исходного текста. Проследите, чтобы программа давала одинаковый результат независимо от места и времени выполнения. Подобные программы называются интроспективными, и существует теорема, в которой утверждается, что интроспективную программу можно написать на любом «достаточно мощном» языке программирования. Все обычные языки программирования – «достаточно мощные»[3].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]