Задача с колодой карт - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В колоде карт должно содержаться 52 карты .Масти и ранги карт должны быть заданы с помощью константных массивов.Сдача карт должна производиться случайным образом .Предусмотреть невозможность повторной сдачи одной и той же карты. программа выдает по 9 карт трем игрокам и подсчитывает количество последовательностей из трех и боле карт одной масти у каждого игрока -Не могу сделать так , что бы программа подсчитала количество последовательностей из трех и боле карт одной масти вот начало кода :
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
#define NUM_SUITS 4
#define NUM_RANKS 13
int main()
{
    int in_hand[NUM_SUITS][NUM_RANKS] = { 0 };
    int num_cards = 1, rank, suit;
    const char rank_code[] = { '2','3','4','5','6','7','8','9','t','j','q','k','a' };
    const char suit_code[] = { '\x03','\x04','\x05','\x06' };
    setlocale(LC_ALL, "Rus");
    //Инициализация генератора случайных чисел
    srand(time(0));
    printf("Ваши карты : \n");
    while (num_cards <= 27)
    {
        suit = rand() % NUM_SUITS; //Случайная масть 
        rank = rand() % NUM_RANKS;  //Случайный ранг
                                    //Подписываем карту как 1 и делаем шаг цикла
        if (!in_hand[suit][rank])
        {

            if (num_cards <= 9)//Выдача карт первому игроку
            {
                if (num_cards == 1)
                {
                    printf("Первый игрок: ");
                }
                printf("%c%c  ", rank_code[rank], suit_code[suit]);
                if (num_cards == 9)
                {
                    printf("\n");
                }
            }

            if (num_cards >= 10 && num_cards <= 18) //Выдача карт второму игроку
            {
                if (num_cards == 10)
                {
                    printf("Второй игрок: ");
                }
                printf("%c%c  ", rank_code[rank], suit_code[suit]);
                if (num_cards == 18)
                {
                    printf("\n");
                }
            }

            if (num_cards>18) //Выдача карт третьему игроку
            {
                if (num_cards == 19)
                {
                    printf("Третий игрок: ");
                }
                printf("%c%c  ", rank_code[rank], suit_code[suit]);
                if (num_cards == 27)
                {
                    printf("\n");
                }
            }

            in_hand[suit][rank] = 1; //Карта выбрана
            num_cards++;
            
        }
    
    }
    printf("\n");
    return 0;
}

Решение задачи: «Задача с колодой карт»

textual
Листинг программы
void init_cards(Cards *cards)
{
  assert(cards != NULL);
 
  for (unsigned i = 0; i < ARRAY_SIZE(*cards); ++i)
  {
    unsigned j = rand() % (i + 1);
    (*cards)[i] = (*cards)[j];
    (*cards)[j].suit = i / N_RANKS;
    (*cards)[j].rank = i % N_RANKS;
  }
}

Объяснение кода листинга программы

  1. В функции init_cards происходит инициализация колоды карт.
  2. Первая проверка на NULL адрес указывает на корректность передачи указателя на колоду карт.
  3. В цикле for происходит перебор карт в колоде.
  4. Случайным образом выбирается карта из колоды и помещается на текущую позицию.
  5. Значение переменной i делится на N_RANKS для определения масти карты.
  6. Значение переменной i берется по модулю N_RANKS для определения достоинства карты.
  7. Переменная j инициализируется случайным образом, используя функцию rand().
  8. Значение переменной j берется по модулю (i + 1) для определения индекса карты, которую необходимо поместить на текущую позицию.
  9. Карта, соответствующая индексу j, копируется на текущую позицию.
  10. Значения переменных suit и rank карты, находящейся на текущей позиции, присваиваются соответствующие значения.
  11. Карты в колоде перемешиваются в соответствии с алгоритмом Fisher-Yates.
  12. Результатом работы функции является инициализированная колода карт.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы