Известное казино хочет поправить свое пошатнувшееся финансовое положение, установив новую модель игровых автоматов "Покер" улучшенного дизайна. Игроку в покер необходимо собрать 5 карт таким образом, чтобы среди них было максимальное количество совпадающих (лучшая комбинация – все пять карт совпадает, а худшая – все различны). К сожалению, главный программист казино недавно неожиданно разбогател, уволился и уехал на Багамы. Без него казино не может решить, как по выпавшему набору карт определить размер выигрыша клиента. Помогите казино справиться с этой задачей. poker
если все 5 чисел равны four of a kind
если ровно 4 числа равны между собой full house
если три из пяти чисел равны между собой и два оставшихся числа равны thee of a kind
если ровно три числа равны two pairs
если есть две пары равных чисел one pair
если только два числа равны all different
если все числа различны
Я понимаю то, что можно все это прописать через If, но как это сделать более оптимизировано и затратить как можно меньше ресурсов компьютера?
Шаг 1 - отсортируйте руку
Шаг 2 - Сравниваем первую и вторую карту. Совпали - проверяем третью и т.д. выясняя самую длинную цепочку.
Не совпали - сдвигаемся на вторую карту и продолжаем тоже самое.
Как вариант:
1. Сделать массив a из 13 элементов.
2. Пройти по руке, делая a[i]++ , где i - номинал карты.
3. Отсортировать массив a.
4. Если первый элемент 5 или 4, все ясно, если 3 или 2, то посмотреть на второй.
* Наверное, быстрее шаги 3 и 4 сделать просто в один проход массиву. Если 5 или 4 - выходим, если 2 или 3, ищем дальше 2 или 3.