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