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

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

Войти
Регистрация
Восстановить пароль
 
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
#1

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

25.11.2012, 14:22. Просмотров 223. Ответов 2
Метки нет (Все метки)

Можно ли оптимизировать алгоритм этой функции?
У меня извечная проблема... когда я напишу функцию или часть кода в программе и он работает, то вместо радости у меня появляется чувство что я плохо составил алгоритм и код получился некрасивым. несмотря на то что он свою функцию выполняет
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++
Такая ситуация: есть файл с определённым именем void StarSystem::load(string inputName) { stringstream ss; ss.str(&quot;&quot;); ...

Проверка наличия соединения с интернет, VC++ - C++
Здравствуйте. 1.Подскажите пожалуйста, как я могу проверить, подключен ли компьютер к интернет, и отследить состояние подключения (Т.е....

Проверка наличия слова в тексте - C++
на javascript есть вот такой простой способ проверки /Hello/.test('Hello World'); // true /Hi/.test('Hello World'); //false есть ли...

Проверка наличия файлов в директории - C++
Всем привет. Возникли сложности, помогите, пожалуйста) Необходимо добавить код в приложение, который при запуске проверял бы наличие...

Проверка наличия символов в строке - C++
Задача состоит в том чтобы проверить встречаются ли нужные нам символы в строке, я попробовал сделать ф-цию поиска и четыре раза прогнать...

Поиск среди пар элементов вектора - C++
В заданном векторе провести поиск среди пар его элементов и найти те пары, разность между элементами которых есть величина, наибольшая для...

Исключение повторов комбинаций среди множества пар целых чисел с помощью multimap - C++
Здравствуйте. Есть задача &quot;Используйте шаблон multimap для исключения повторов комбинаций среди множества пар целых чисел.&quot; Не могу...

Дается последовательность. Найдите максимальное произведение среди всех пар этих чисел - C++
Е. Дается последовательность из N чисел. Найдите максимальное произведение среди всех пар этих чисел. Первая строка входного файла...

Класс, выясняющий, сколько среди заданных чисел пар, которые дают в сумме четное число - C++
Добрый вечер. Помогите пожалуйста, нужно написать класс.:cry: Заданы три числа. Выяснить, сколько среди них пар, которые дают в сумме...

Решить уравнение Ax = B для семи пар значений А и В, заданных в двух массивах. - C++
Прошу помочь решить задачки!:(очень нужно (Билет №20) Решить уравнение Ax = B для семи пар значений А и В, заданных в двух...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 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
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
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     Проверка наличия двух пар среди выданных игроку карт
Ответ Создать тему
Опции темы

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