// レポート課題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);
}
}