prg-lang-2 / week06 / report06.c
report06.c
Raw
#include <stdio.h>
#define CARD_MAX 53
#define JOKER -1

void perfectShuffle(int *cards)
{
    /* ここから */

    // 有効なカード枚数のカウントと対象配列のコピーを行う
    int cnt = 0;
    int cards_a[CARD_MAX] = {};
    for (int i = 0; i < CARD_MAX; i++)
    {
        cards_a[i] = *(cards + i);
        if (cards_a[i] == JOKER)
        {
            break;
        }
        cnt++;
    }

    // 対象配列にシャッフルしたものを代入する
    for (int i = 0; i < cnt / 2; i++)
    {
        *(cards + i * 2) = cards_a[i];
        *(cards + i * 2 + 1) = cards_a[cnt / 2 + i];
    }

    /* ここまで */
    // 1回シャッフルした時点のカードを表示
    int *now = cards;
    while (*now != JOKER)
    {
        printf("%d ", *(now++));
    }
    printf("\n");
}

int main(void)
{
    int cards1[CARD_MAX] = {1, 2, 1, 2, 1, 2, 1, 2, JOKER};
    int cards2[CARD_MAX] = {1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, JOKER};

    perfectShuffle(cards1);
    perfectShuffle(cards1);
    perfectShuffle(cards1);
    perfectShuffle(cards2);
    perfectShuffle(cards2);
    perfectShuffle(cards2);
    perfectShuffle(cards2);

    return 0;
}