Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vars-cat
0 / 0 / 1
Регистрация: 21.12.2011
Сообщений: 47
#1

Проверка на стрит(покер) - C++

29.08.2012, 12:51. Просмотров 1031. Ответов 3
Метки нет (Все метки)

В одном из заданий из книги Дейтелов необходимо определить, имеется ли на руках у игрока стрит(пять карт последовательных номиналов). Но сколько я не пытался решить это задание, у меня ничего не получалось. Нужна ваша помощь.

К примеру есть массив строк с номиналами карт
C++
1
const char *testFace[] = { "Two", "Five", "Six", "Three", "Ace" }
и функция с помощью которой необходимо определить, имеется ли на руках у игрока стрит
C++
1
bool checkForStraight(const char **face)
Задача кажется несложной, но из-за особенности туза в покере я не могу понять как её решить.
Из wiki: Туз может рассматриваться и как младшая карта для образования последовательности (стрит) до 5 включительно, и как старшая (в комбинации с король— дама — валет — 10)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2012, 12:51     Проверка на стрит(покер)
Посмотрите здесь:

C++ Задача Покер
Задача Покер C++
C++ Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов
Моделирование игры в покер C++
Программа для игры в покер C++
Покер C++
C++ стрит-флеш
Покер C++
C++ Графический покер
C++ Покер
C++ Кому интересно. Покер
Определить, выпал ли стрит? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.08.2012, 13:14     Проверка на стрит(покер) #2
удобнее работать не с именами карт, а с их весами или значениями или старшинством или индексами в массиве. чем младше карта - тем меньше ее вес. тогда задача определения стрита сводится к сортировке имеющихся пяти карт по весу и определению факта того, что разность весов у соседних карт равна еденице. ну и предусмотреть случай с тузом. в этом варианте после сортировки последовательность будет 2 3 4 5 A и эту последовательность тоже легко определить.
vars-cat
0 / 0 / 1
Регистрация: 21.12.2011
Сообщений: 47
29.08.2012, 13:30  [ТС]     Проверка на стрит(покер) #3
Цитата Сообщение от DU Посмотреть сообщение
удобнее работать не с именами карт, а с их весами или значениями или старшинством или индексами в массиве. чем младше карта - тем меньше ее вес. тогда задача определения стрита сводится к сортировке имеющихся пяти карт по весу и определению факта того, что разность весов у соседних карт равна еденице.
Я примерно так и делал.
Цитата Сообщение от DU Посмотреть сообщение
...ну и предусмотреть случай с тузом. в этом варианте после сортировки последовательность будет 2 3 4 5 A(по правилам из wiki, туз не может быть старше пятёрки. В этом случае он будет равен единице) и эту последовательность тоже легко определить.
А вот как раз с этим я никак не могу разобраться. Поэтому и прошу помощи.
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
29.08.2012, 13:45     Проверка на стрит(покер) #4
ну примерно выглядит так.
имеем последовательность.
отсортировали ее.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < 5 - 1; ++i)
{
   if (card[i+1] - card[i] != 1) //  разность отлична от еденицы.
   {
      // но нужно еще проверить что это не стрит с тузом.
      // если это последнаяя итерация (четвертая, i == 3) и если iая (предпоследняя) карта - пятерка
      // а i + i (последняя) карта - туз - то у нас стрит. иначе не стрит.
      const bool isStraight = (i == 3 && card[i] == 5 && card[i+1] == Ace);
      return isStraight;
   }
}
 
return true;

Не нужно пытаться представить туз младшим в этой комбинации. Это вроде бы одно исключение, в котором туз является младшим. Во всех других случаях он старший и лучше так и оставить и обработать вот такой вот хитрый случай со стритом от туза до пятерки.
Yandex
Объявления
29.08.2012, 13:45     Проверка на стрит(покер)
Ответ Создать тему
Опции темы

Текущее время: 10:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru