Всероссийская олимпиада по информатике. Школьный этап. 2013г. Тумайкина Ю.Н., МБОУ «СОШ с.Терновка» Разбор задачи 2 «Покер»
Условие: Известное казино хочет поправить свое пошатнувшееся финансовое положение, установив новую модель игровых автоматов "Покер" улучшенного дизайна. Игроку в покер необходимо собрать 5 карт таким образом, чтобы среди них было максимальное количество совпадающих (лучшая комбинация – все пять карт совпадает, а худшая – все различны). К сожалению, главный программист казино недавно неожиданно разбогател, уволился и уехал на Багамы. Без него казино не может решить, как по выпавшему набору карт определить размер выигрыша клиента. Помогите казино справиться с этой задачей. Формат входных данных Программа получает на вход 5 целых положительных чисел x1, x2, x3, x4, x5, не превосходящих 10 9.
Условие: Формат выходных данных Программа должна вывести на экран одну из следующих строк: poker если все 5 чисел равны four of a kind если ровно 4 числа равны между собой full house если три из пяти чисел равны между собой и два оставшихся числа равны three of a kind если ровно три числа равны two pairs если есть две пары равных чисел one pair если только два числа равны all different если все числа различны Пример Входные данные Выходные данные full house
Основные моменты: Входные данные храним в массиве. Организовываем два цикла, для сравнения элементов массива на равенство (оба цикла от 1 до 5). Во внутреннем цикле: если элементы равны, то увеличиваем счетчик; Во внешнем цикле: суммируем значения счетчика. В зависимости от значения суммы, применяя оператор выбора (case of), выводим результат.
Рассмотрим на примере: – значение счетчика – значение суммы – элемент массива =17
Аналогично: Сумма: =9 – элемент массива Сумма: =13
Основные моменты: В связи с тем, что каждый элемент сравнивается с 1 по 5 включительно, значения счетчика могут быть следующими: 5 – если все пять цифр одинаковые (сумма будет =25); 4 – если число повторяется 4 раза (сумма будет =17); 3 – если число повторяется трижды и 2 если дважды. При различных комбинациях пар и троек получаем следующие суммы: =13 (фулл хаус); =9 (две пары); =11(одна тройка); =7 (одна пара).
Текст программы: program poker; var x: array [1..5] of longint; i,j,s,k:integer; begin for i:=1 to 5 do read(x[i]); s:=0; for j:=1 to 5 do begin k:=0; for i:=1 to 5 do if x[j]=x[i] then k:=k+1; s:=s+k; end; case s of 25: writeln ('poker'); 17: writeln ('four of a kind'); 13: writeln ('full house'); 9: writeln ('two pairs'); 11: writeln ('three of a kind'); 7: writeln ('one pair') else writeln ('all different') end; end.
Прогон программы по ключу:
Спасибо за внимание