КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Быки и коровы
(модификация задачи А.А. Суханова) Компьютер и ребенок играют в следующую игру. Ребенок загадывает последовательность из четырех (не обязательно различных) цветов, выбранных из шести заданных. Для удобства будем обозначать цвета цифрами от 1 до 6. Компьютер должен отгадать последовательность, используя информацию, которую он получает из ответов ребенка. Компьютер отображает на экране последовательность, а ребенок должен ответить (используя для ввода ответа клавиатуру) на два вопроса: · сколько правильных цветов на неправильных местах; · сколько правильных цветов на правильных местах.
Пример. Предположим, что ребенок загадал последовательность 4655. Один из возможных способов отгадать последовательность такой:
Написать программу, которая всегда отгадывает последовательность не более чем за шесть вопросов, в худшем случае - за десять.
Правильный выбор структур данных - это уже половина решения. Итак, структуры данных и процедура их инициализации. Const Pmax=6*6*6*6; Type Post=String[4]; Var A:array[1..Pmax] of Post; B:array[1..Pmax] of boolean; cnt:integer;{счетчик числа ходов} ok:boolean;{найдено решение} procedure Init; var i,j,k,l:integer; begin for i:=1 to 6 do for j:=1 to 6 do for k:=1 to 6 do for l:=1 to 6 do A[(i-1)*216+(j-1)*36+(k-1)*6+l]:= Chr(i+Ord(‘0’))+Chr(j+Ord(‘0’))+Chr(k+Ord(‘0’))+Chr(k+Ord(‘0’)); for i:=1 to Pmax do B[i]:=true; cnt:=0;ok:=false; end; Поясним на примере идею решета. Пусть длина последовательности равна двум, а количество цветов - четырем. Ребенок загадал 32, а компьютер спросил 24. Ответ ребенка 1 0, фиксируем его в переменных kr (1) и bk(0).
Итак, было 16 возможных вопросов, после первого осталось четыре - работа решета. Функция, реализующая анализ элемента массива А, по значениям переменных kr и bk, имеет вид: function Pr(a,b:Post;kr,bk:integer):boolean; var i,x:integer; begin {проверка по “быкам”} x:=0; for i:=1 to 4 do if a[i]=b[i] then inc(x); if x<>bk then begin Pr:=false;exit;end; {проверка по “коровам”} x:=0; for i:=1 to 4 do if (a[i]<>b[i]) and (Pos(b[i],a)<>0) then inc(x); if x<>kr then begin Pr:=false;exit;end; Pr:=true; end; Логика - “сделать отсечение” по значению хода h. procedure Hod(h:Post); var i,kr,bk:integer; begin inc(cnt);write(cnt:2,’.’,h,’-’); readln(kr,bk); if bk=4 then begin ok:=true;<вывод результата>;end else for i:=1 to Pmax do if B[i] and Not Pr(A[i],h,kr,bk) then B[i]:=false; end; Общая логика. ..... begin clrscr; init; hod(‘1223’); while not ok do begin
hod(h); end; end. Дальнейшая работа с задачей требует ответа на следующие вопросы: · Зависит ли значение cnt от выбора первого хода? Установить экспериментальным путем. · Как логика выбора очередного хода влияет на результат игры? Исследовать. Например, выбрать тот элемент А (соответствующий элемент В должен быть равен true), в котором количество несовпадающих цифр максимально.
Дата добавления: 2014-11-28; Просмотров: 445; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |