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

Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
coldmind
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 29
20.01.2012, 22:23     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #1
есть массив. надо определить в нем комбинации повторяющихся элементов:

C++
1
2
3
4
5
6
7
8
9
10
for(int i=0; i<5;i++) {
 
        k=count(tmpmass,tmpmass+5,tmpmass[i]);
 
    }
        
        if(k==2) cout<<"One Pair"<<endl;
        if(k==3) cout<<"Three"<<endl;
        if(k==4) cout<<"Four of a king"<<endl;
        if(k==5) cout<<"Imbossible"<<endl;
но что делать, если допустим встретится комбинация с 3 и 2 повторений(например 4 4 4 2 2)? или 2 повтора по два разных чисел (4 4 2 2 1). прошу помочь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2012, 22:23     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов
Посмотрите здесь:

C++ Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию.
C++ В матрице целых чисел поменять нулевую строку со строкой, содержащей наибольшее количество повторяющихся элементов.
C++ Даны два массива из n целых чисел каждый. Определить, в каком из них больше положительных элементов.
Даны три целых числа a, b и c. Найти количество чётных чисел среди них C++
Даны шесть различных чисел. Определить максимальное из них C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
20.01.2012, 23:06     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #2
Можно полное условие задачи?
coldmind
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 29
20.01.2012, 23:11  [ТС]     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #3
вот :

Даны 5 целых чисел. Среди них:
если одинаковы 5, то вывести "Impossible", иначе
если одинаковы 4, то вывести "Four of a Kind", иначе
если одинаковы 3 и 2, то вывести "Full House", иначе
если есть 5 последовательных, то вывести "Straight", иначе
если одинаковы 3, то вывести "Three of a Kind", иначе
если одинаковы 2 и 2, то вывести "Two Pairs", иначе
если одинаковы 2, то вывести "One Pair", иначе
вывести "Nothing".
Ограничения: все числа от 1 до 13 включительно
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
20.01.2012, 23:20     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #4
Цитата Сообщение от coldmind Посмотреть сообщение
но что делать, если допустим встретится комбинация с 3 и 2 повторений(например 4 4 4 2 2)?
ну тогда напиши фулхаус ))))))))как в покере)
coldmind
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 29
20.01.2012, 23:38  [ТС]     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #5
я имею ввиду как мне выловить когда повторений несколько, в комбинации.
Вася1q
 Аватар для Вася1q
21 / 21 / 0
Регистрация: 13.09.2011
Сообщений: 311
20.01.2012, 23:41     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #6
если два элемента массива равны одному, а два другому...что тут сложного?
coldmind
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 29
21.01.2012, 02:38  [ТС]     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #7
вроде бы написал, но сама проверка походу код индийский)
если кто-то может предложить свой результат, с радостью приму

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <string> 
#include <fstream> 
#include <vector>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
int order(int *a, int n)
{
    return n<2 ? 1 : (a[n-2] > a[n-1] ? 0 : order(a, n-1));  //проверка порядка элементов массива
}
 
int main(void) {
 
    ifstream in("in_f.txt");
    vector<int> element;
    int temp; 
    int order(int *a, int n);
 
    int tmpmass[5];
    int sm[5];
    int res;
    int c3=0; int c2=0; int c4=0;
    int same=0;
 
    while(in>>temp) {
        element.push_back(temp); // копируем числа из файла в векторый массив
    }
 
 
    for(int i=0; i<5; i++) tmpmass[i]=element[i]; // переводим векторный в массив в обычный 
    
    for(int i=0; i<5; i++) {
        if(tmpmass[i]==tmpmass[i+1]) same=1; //проверка одинаковы ли элементы массива
    }
    
 
    for(int i=0; i<5;i++) {
        sm[i]=count(tmpmass,tmpmass+5,tmpmass[i]);      //ищем количество вхождений элементов массива
            c2=count(sm,sm+5,2);   //
            c3=count(sm,sm+5,3);   // считаем комбинации из предыдущего результата
            c4=count(sm,sm+5,4);   //
    }
 
        res=c2+c3+c4;
 
        if(order(tmpmass, 5)==1 && res==0 && same==0) cout<<"Straight"<<endl;
        if(same==1 && res==0) cout<<"Impossible"<<endl;
        if(res==2) cout<<"One Pair"<<endl;
        if(res==3) cout<<"Three of a Kind"<<endl;
        if(c2==4) cout<<"Two Pairs"<<endl;
        if(c3==0 && c2==0 && c4==4) cout<<"Four of a Kind"<<endl;
        if(res==5) cout<<"Full House"<<endl;
        if(same==0 && res==0 && order(tmpmass, 5)==0) cout<<"Nothing"<<endl;
 
    return 0;
}
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.01.2012, 06:23     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #8
Код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include <stdlib.h>
 
#define N 5
 
int cmp(const void* a, const void* b)
{
    return (*(int*)a - *(int*)b);
}
 
int main(void)
{
    FILE* in = freopen("input.txt", "r", stdin);
    FILE* out = freopen("output.txt", "w", stdout);
    int arr[N], i, k, size, tmp[] = { 1, 1, 1, 1, 1 };
 
    for (i = 0; i < N; ++i)
        scanf("%d", &arr[i]);
 
    qsort(&arr[0], N, sizeof(int), cmp);
    
    for (i = 1, k = 0, size = N; i < N; ++i)
    {
        if (arr[i] == arr[i - 1])
            ++tmp[k], --size;
        else
            ++k;
    }
 
    if (size != N)
    {
        k = tmp[0];
        for  (i = 1; i < size; ++i)
            if (tmp[i] > k)
                k = tmp[i];
        printf("%s\n", (size == 1 ? "Impossible" : (size == 2 ? (k == 4 ? "Four of a Kind" : "Full House") : (size == 3 ? (k == 3 ? "Three of a Kind" : "Two Pairs") : "One Pair"))));
    }
    else
    {
        for (i = 1; i < N; ++i)
            if (arr[i] != arr[i - 1] + 1)
                break;
 
        printf("%s\n", (i == N ? "Straight" : "Nothing"));
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 13:59     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов
Еще ссылки по теме:

Даны три целых числа a, b и c. Найти количество одинаковых чисел среди них C++
Даны 2 файла целых чисел. Определить равны ли они C++
C++ Даны шесть различных чисел. Определить максимальное из них

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

Или воспользуйтесь поиском по форуму:
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
21.01.2012, 13:59     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов #9
Цитата Сообщение от Jupiter Посмотреть сообщение
наговнокодил на ночь глядя
Аналогично, только давно это было
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <map>
#define f(b) freopen(#b"put.txt","a+",std##b);
int s, x;
main(){
    f(in)
    f(out)
    std::map<int, int> m;
    for (s = 5; s--; ++m[x])
        scanf("%d", &x);
    if ( (s = m.size()) == 1) 
        puts("Impossible"); else
    if (s == 2)
         puts( ( x = m.begin()->second ) == 2 || x == 3 ? "Full House" : "Four of a Kind"); else
    if (s == 3) 
        puts( m.begin()->second != 3 &&
        (*--m.end()).second != 3  && 
        (*++m.begin()).second != 3 ? "Two Pairs" : "Three of a Kind"); else
    if (s == 4)
        puts("One Pair"); else
    if (s == 5)
        puts ((*--m.end()).first - m.begin()->first == 4 ? "Straight" : "Nothing");        
}
Yandex
Объявления
21.01.2012, 13:59     Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов
Ответ Создать тему
Опции темы

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