// レポート課題06 パーフェクトシャッフル /* #include #define CARD_MAX 53 #define JOKER -1 void perfectShuffle(int *cards) { // ここから // ここまで //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; } //出力例 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}; の場合 1 1 2 2 1 1 2 2 1 1 1 1 2 2 2 2 1 2 1 2 1 2 1 2 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 1 3 1 3 1 3 1 3 2 4 2 4 2 4 2 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 */ public class ExerR06 { public static final int CARD_MAX = 53; public static final int JOKER = -1; public static void perfectShuffle(int[] cards) { // ここから int cnt = cards.length - 1; int[] cards_org = cards.clone(); for (int i = 0; i < cnt / 2; i++) { cards[i * 2] = cards_org[i]; cards[i * 2 + 1] = cards_org[cnt / 2 + i]; } // ここまで // 1回シャッフルした時点のカードを表示 // Javaでは配列(例:cards)の要素を順に一つずつ取り出し, // 変数(例:card)に代入して繰り返すような繰り返しが書ける // for (型 変数名: 配列等の変数) {} for (int card : cards) { if (card == JOKER) { // JOKERが来たら break; // for文を抜ける } System.out.printf("%d ", card); } System.out.printf("\n"); } public static void main(String[] args) { // このような初期化時では, // 初期化子の個数と要素数を異なるように // 指定できないので番兵は本来不要 int[] cards1 = {1, 2, 1, 2, 1, 2, 1, 2, JOKER}; int[] cards2 = {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); } }