Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal] Определить расклад карт в игре Покер 
:(
    Опции темы
slavka3
Дата 2.12.2006, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.11.2006

Репутация: нет
Всего: нет



Задано пять целых последовательных чисел. Если:
- есть пять одинаковых, то вывести “Impossible”, иначе;
- есть четыре одинаковых, то вывести “Four of а 
Kind”, иначе;
- есть одинаковых 3 и 2, то вывести “Full House”, иначе;
- есть пять последовательных, то вывести “Straight”, иначе;
- есть три одинаковых, то вывести “Three of а Kind”, иначе;
- есть два и два одинаковых, то вывести “Two Pairs”, иначе;
- есть два одинаковых, то вывести “One Pair”, иначе;
- вывести “Nothing”.


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


Код

var a,b,c,d,e,g,n,m,h:integer;
begin
read(a,b,c,d,e);
if (a=b) and (b=c) and (c=d) and (d=e) then writeln('Impossible') else
if (a=b) and (b=c) and (c<>d) and (c<>e) and (d=e) then writeln('Full House') else
if ((a+b+c+d+e)/5=c) then writeln('Straight') else
if (a=b) and (b=c) or (a=d) or (a=e) or (b=d) or (b=e)  then writeln('Three of a Kind') else
if (a=b) or (b=c) or (c=d) or (d=e) then writeln('Two Pairs') else


writeln('Nothing');
end.


Это сообщение отредактировал(а) Exception - 4.12.2006, 16:49
PM MAIL   Вверх
Oleg_Ci
Дата 4.12.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Вообще-то на С++ решил smile 
Код

#include <stdio.h>

const int size = 5;
int count( const int * m, int a ); // подсчёт количества чисел в массиве
bool find( const int * m, int a ); // поиск в массиве числа

/////////////// main ///////////////////
int main(int argc, char *argv[])
{ 
    int m[size]; // массив для чисел
    int n[size]; // массив для количества повтарений
    scanf("%d%d%d%d%d", &m[0], &m[1], &m[2], &m[3], &m[4] ); // считываем 5 чисел
    int i, j;
    for( i=0; i<size; i++ )
        n[i] = count( m, m[i] );

    for( i=0; i<size-1 && m[i] > m[i+1]; i++ ); // если есть возврастающая полследовательность
    for( j=0; j<size-1 && m[j] < m[j+1]; j++ ); // если есть послед. пониж.
    if( i == size-1 || j == size-1 ) // есть пять последовательных, то вывести “Straight”
        puts("Straight");
    else if( find( n, 5 ))// есть пять одинаковых, то вывести “Impossible”
        puts("Impossible");
    else if( find( n, 4 ))// есть четыре одинаковых, то вывести “Four of а Kind”
        puts("Four of а Kind");
    else if( find( n, 3 ) && find( n, 2 ))// есть одинаковых 3 и 2, то вывести “Full House”
        puts("Full House");
    else if( find( n, 3 )) // есть три одинаковых, то вывести “Three of а Kind”
        puts("Three of а Kind");
    else if( count( n, 2 ) == 4 ) // есть два и два одинаковых, то вывести “Two Pairs”
        puts("Two Pairs");
    else if( find( n, 2 ))// есть два одинаковых, то вывести “One Pair”
        puts("One Pair");
    else // иначе вывести “Nothing”
        puts("Nothing");
    fflush(stdin);
    getchar(); // пауза
    return 0;
}
///////////////// End main //////////////////////
int count( const int * m, int a ){
    int x=0;
    for( int i=0; i<size; i++ )
        if( m[i] == a ) x++;
    return x;
}
bool find( const int * m, int a ){
    for( int i=0; i<size; i++ )
        if( m[i] == a ) return true;
    return 0;
}

PM MAIL   Вверх
Dov
Дата 4.12.2006, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Олег4 @  4.12.2006,  19:30 Найти цитируемый пост)
Код

for( i=0; i<size-1 && m[i] > m[i+1]; i++ ); // если есть возврастающая полследовательность
for( j=0; j<size-1 && m[j] < m[j+1]; j++ ); // если есть послед. пониж.
if( i == size-1 || j == size-1 ) // есть пять последовательных, то вывести “Straight”
     puts("Straight");


Олег4, видать ты редко в покер играешь.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Oleg_Ci
Дата 5.12.2006, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(Dov @  5.12.2006,  01:36 Найти цитируемый пост)
Олег4, видать ты редко в покер играешь

Да, можно сказать вообще не играл...
По крайней мере правил почти незнаю...
PM MAIL   Вверх
slavka3
Дата 5.12.2006, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.11.2006

Репутация: нет
Всего: нет



Мне нужно на Pascal
PM MAIL   Вверх
volvo877
Дата 5.12.2006, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 34
Всего: 116



Цитата(slavka3 @  5.12.2006,  15:34 Найти цитируемый пост)
Мне нужно на Pascal 

Вот тебе на Паскале:
Код
const
  n = 10; { Максимально возможное число, которое будет храниться в массиве }
type
  arr_type = array[1 .. n] of integer;

const
  arr: array[1 .. 5] of integer = (4, 3, 6, 8, 4); { <--- Это - твои числа }
var
  mask: arr_type;

procedure set_mask(var msk, arr: array of integer;
          size: integer);
var i: integer;
begin
  for i := 0 to n - 1 do msk[i] := 0;
  for i := 0 to size - 1 do inc(msk[ arr[i] - 1 ]);
end;
function is_straight(var msk: array of integer;
         size: integer): boolean;
var
  res: boolean;
  i: integer;
begin
  is_straight := false;
  i := 0; while msk[i] = 0 do inc(i);
  if i + 4 > size - 1 then exit
  else
    for i := i to i + 4 do res := res and (msk[i] = 1);

  is_straight := res;
end;
function exists(const msk: array of integer;
         size: integer; X: integer): integer;
var i, res: integer;
begin
  res := 0;
  for i := 0 to size - 1 do
    if msk[i] = X then inc(res);
  exists := res;
end;

begin
  set_mask(mask, arr, 5);
  if is_straight(mask, n) then writeln('Straight')
  else
    if exists(mask, n, 5) = 1 then writeln('Impossible')
    else
      if exists(mask, n, 4) = 1 then writeln('Four of a Kind')
      else
        if (exists(mask, n, 3) = 1) and
           (exists(mask, n, 2) = 1) then writeln('Full House')
        else
          if exists(mask, n, 3) = 1 then writeln('Three of a kind')
          else
            if exists(mask, n, 2) = 2 then writeln('Two Pairs')
            else
              if exists(mask, n, 2) = 1 then writeln('One Pair')
              else writeln('Nothing');

end.


Немного подкорректировал решение, проверь еще раз...

Это сообщение отредактировал(а) volvo877 - 5.12.2006, 22:12
PM MAIL   Вверх
slavka3
Дата 5.12.2006, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.11.2006

Репутация: нет
Всего: нет



А почему она не работает?
PM MAIL   Вверх
volvo877
Дата 5.12.2006, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 34
Всего: 116



Я не знаю, почему она У ТЕБЯ не работает... Я лично ее тестировал для всех значений... Все правильно выводит ...
PM MAIL   Вверх
Dov
Дата 5.12.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Олег4 @  5.12.2006,  14:56 Найти цитируемый пост)
Да, можно сказать вообще не играл...По крайней мере правил почти незнаю...

Я тоже.  smile  Короче, Олег4, тут фишка вот в чём. Под последовательностью подразумевается 5 чисел, имеющих такой вид, например:
1 2 3 4 5 или 9 8 7 6 5 или 7 3 5 4 6, т.е. разница между числами составляет 1 и при этом они могут лежать в массиве не по-порядку. По этому те циклы не годятся. ИМХО.
 Ферштейн?  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
slavka3
Дата 5.12.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.11.2006

Репутация: нет
Всего: нет



Dov ты не понял числа могут и повторятся, например 2 2 3 4 4



Это сообщение отредактировал(а) alexeis1 - 6.12.2006, 10:43
PM MAIL   Вверх
Dov
Дата 6.12.2006, 04:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(slavka3 @  2.12.2006,  19:02 Найти цитируемый пост)
- есть пять последовательных, то вывести “Straight”

slavka3, я про это написал.



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Oleg_Ci
Дата 6.12.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(Dov @  6.12.2006,  00:37 Найти цитируемый пост)
 По этому те циклы не годятся. ИМХО. Ферштейн?

ну тогда перед этими циклами сортировку массива надо произвести и всё smile 
и можно-будет одним циклом обойтись.
PM MAIL   Вверх
Dov
Дата 6.12.2006, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Олег4 @  6.12.2006,  16:48 Найти цитируемый пост)
ну тогда перед этими циклами сортировку массива надо произвести и всё  и можно-будет одним циклом обойтись.

Совершенно в дырочку, только не забудь про это:
Цитата(Dov @  5.12.2006,  20:37 Найти цитируемый пост)
 т.е. разница между числами составляет 1




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Oleg_Ci
Дата 7.12.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(slavka3 @  6.12.2006,  01:57 Найти цитируемый пост)
Dov ты не понял числа могут и повторятся, например 2 2 3 4 4


Цитата(Dov @  6.12.2006,  23:16 Найти цитируемый пост)
Совершенно в дырочку, только не забудь про это:Цитата(Dov @  5.12.2006,  20:37 ) т.е. разница между числами составляет 1


Так числа могут повторятся или нет ?
PM MAIL   Вверх
Dov
Дата 7.12.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Цитата(Олег4 @  7.12.2006,  13:10 Найти цитируемый пост)
Так числа могут повторятся или нет ?

Олег4, конечно могут, иначе это был бы не покер, а нечто другое.
 Я говорю про тот случай, когда числа не повторяются. Ещё раз...
 
Цитата(slavka3 @  2.12.2006,  19:02 Найти цитируемый пост)
- есть пять последовательных, то вывести “Straight”, 




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0632 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.