Ним-3 v2.0 Написать программу на python, соблюдающую данные условия
Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Игра ним для двух игроков с тремя кучами и без ограничения на количество забираемых камней.
Напишите программу с «искусственным интеллектом» (ИИ), которая играет против пользователя и выигрывает, если может. Исходное количество камней в кучах задаёт пользователь, программа всегда ходит первой. Выигрывает забравший последний камень, и при окончании игры нужно объявить победителя.
Алгоритм игры выглядит следующим образом:
Сначала пользователь вводит количества камней в кучах (натуральные числа, каждое на новой строке).
Затем первый ход делает программа и выводит через пробел пять чисел: из какой кучи взяты камни; сколько камней взято; сколько камней осталось в кучах, сначала в первой, затем во второй, а потом и в третьей
Затем ход делает пользователь: вводит на отдельных строках номер кучи и количество камней, которые он хочет взять.
Если ход некорректный, например, пользователь пытается взять камней больше, чем есть в куче, программа должна вывести: Некорректный ход: и ожидать нового ввода пользователя.
После каждого корректного хода игрока или ИИ нужно выводить пять чисел, как и после первого хода ИИ.
Если выигрывает игрок, то надо вывести фразу: Вы выиграли!, а если ИИ – фразу: ИИ выиграл!
Все сообщения программы должны строго соответствовать условию.
Формат ввода
Для старта игры вводятся три натуральных числа.
Пример диалога игры:
2
2
2
1 2 0 2 2
1
2
Некорректный ход: 1 2
1
0
Некорректный ход: 1 0
2
1
2 1 0 1 2
3 1 0 1 1
2
1
2 1 0 0 1
3 1 0 0 0
ИИ выиграл!
Нам нужно найти наибольшее число x, при котором данное выражение ложно. Когда оно вообще ложно?
В данном логическом выражении используется дизъюнкция (ИЛИ), которая ложна только в одном случае - это когда оба выражения ложны. Когда же выражения ложны? Рассмотрим же их. В обоих выражениях фигурирует отрицание. То есть, выражение в скобках должны быть истинным. Объясняю:
НЕ (истина) = ложь
А это значит, что условие (x < 10) и (число чётное) должны выполняться. Нам нужно найти наибольшее чётное число. Это не может быть 10, поскольку знак неравенства строгий, следовательно, ближайшее наибольшее чётное число - это 8.
ответ8
Задание 2Для данного выражения требуется выполнение следующих условий:
НЕ (x < 7) должно быть ложным, то есть (x < 7) должно быть истинным(x < 6) должно быть ложнымВторое выражение мы можем преобразовать так:
(x ≥ 6). Почему 6 включительно? Потому что, подставив шестёрку в исходное выражение получим: 6 < 6 - ложь. Итого наше выражение имеет вид:
НЕ (x < 7) или (x ≥ 6). Нужно найти наибольшее число, при котором выражение ложно. Это число: 6.
ответ6
Задание 3Такое же, как и 2
Задание 4Решается абсолютно также, как и 2. Дизъюнкция - значит в обеих частях выражения должна быть ложь. Когда ложь получается в двух выражениях? Рассмотрим эти случаи:
НЕ (x < 6) ложно тогда, когда (x < 6) истинно(x < 5) ложно тогда, когда (x ≥ 5)Итого:
НЕ (x < 6) ИЛИ (x ≥ 5)
ответ5
uses crt;
Var mas:array[1..1000, 1..1000] of integer;
N,M,i,j,k:integer;
Begin
Writeln('Введите размер матрицы N*M');
Write('N = ');
readln(N);
Write('M = ');
readln(M);
if (M>1000) or (N>1000) or (M<1) or (N<1)
then
Writeln('Ошибка, указанные значения выходят за пределы матрицы') else
Begin
Writeln('Введите элементы матрицы');
k:=0;
for i:=1 to N do
for j:=1 to M do
Begin
readln(mas[i,j]);
if (mas[i,j] mod 2 = 0) then k:=k+1;
end;
Writeln();
Writeln('Исходная матрица');
for i:=1 to N do
Begin
for j:=1 to M do
Begin
Write(mas[i,j], ' ')
end;
Writeln();
end;
Writeln();
Writeln('Количество четных элементов = ',k);
end;
readln;
end.