#include #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; }