prg-lang-2 / week12 / ExerR06.java
ExerR06.java
Raw
// レポート課題06 パーフェクトシャッフル
/*
#include<stdio.h>
#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);
    }
}