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

Проверка наличия двух пар среди выданных игроку карт - C++

Восстановить пароль Регистрация
 
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
25.11.2012, 14:22     Проверка наличия двух пар среди выданных игроку карт #1
Можно ли оптимизировать алгоритм этой функции?
У меня извечная проблема... когда я напишу функцию или часть кода в программе и он работает, то вместо радости у меня появляется чувство что я плохо составил алгоритм и код получился некрасивым. несмотря на то что он свою функцию выполняет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
bool DeckOfCards::twoPairs (const int *face)
{
    bool twoPairs = false;
    int pairs[5][5] = { 0 };
    int count = 0;
 
    for (int face1 = 0; face1 < 5; face1++)
        for (int face2 = 0; face2 < 5; face2++)
            if (face[face1] == face[face2] && face1 != face2 && (pairs[face1][face2] == 0 || pairs[face2][face1] == 0))
            {
                pairs[face1][face2] = 1;
                pairs[face2][face1] = 1;
                count++;
                if (count == 2)
                {
                    twoPairs = true;
                    break;
                }
            }
 
    return twoPairs;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2012, 14:22     Проверка наличия двух пар среди выданных игроку карт
Посмотрите здесь:

Проверка наличия символов в строке C++
C++ Среди чисел найти все, у которых сумма первых двух равна сумме последних двух
Проверка наличия соединения с интернет, VC++ C++
Решить уравнение Ax = B для семи пар значений А и В, заданных в двух массивах. C++
C++ Дается последовательность. Найдите максимальное произведение среди всех пар этих чисел
Записать в массив N целых чисел. Подсчитать количество пар противоположных чисел среди компонентов этого массива C++
Проверка наличия файлов в директории C++
C++ Проверка наличия файла

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.11.2012, 14:25     Проверка наличия двух пар среди выданных игроку карт #2
хранить все карты отсортированными. Новую карту вставлять "сортировкой вставками". Тогда и 2 пары и 3 пары будут просто идти подряд и условия для них будут
C++
1
2
for (int face1 = 0; face1 < 5-1; face1++)
   if (face[face1] == face[face1+1] )
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
25.11.2012, 14:34  [ТС]     Проверка наличия двух пар среди выданных игроку карт #3
а если без сортировка то я так исправил.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
bool DeckOfCards::twoPairs (const int *face)
{
    bool twoPairs = false; 
    int count = 0; //счетчик пар
 
    for (int face1 = 0; face1 < 5; face1++) //одна карта
        for (int face2 = face1 + 1; face2 < 5; face2++) //другая карта
            if (face[face1] == face[face2])
            {
                count++;
                if (count == 2)
                {
                    twoPairs = true;
                    break;
                }
            }
 
    return twoPairs;
}
но с сортировкой в 100 раз лучше... и почему я сразу не догадался ((((((

Добавлено через 4 минуты
Тогда для пар, троек а каре можно будет замутить одну функцию, так?
хотя нет...а если будет 3 карты подряд? засчитает 2 пары
Yandex
Объявления
25.11.2012, 14:34     Проверка наличия двух пар среди выданных игроку карт
Ответ Создать тему
Опции темы

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