C言語実例 - ヨセフスの生死ゲーム
30人が1隻の船に乗っています。超過積載のため、15人が下船する必要があります。
そこで人々は一列に並び、その並んだ位置が彼らの番号となります。
1から始めて数を数え、9まで数えた人が下船します。
これを繰り返し、船上に残っている人が15人だけになるまで続けます。どの番号の人たちが下船したのでしょうか?
実例
#include<stdio.h>
int c = 0;
int i = 1;
int j = 0;
int a[30] = { 0 };
int b[30] = { 0 };
int main() {
while (i<=31) {
if (i == 31) {
i = 1;
} else if (c == 15) {
break;
} else {
if (b[i] != 0) {
i++;
continue;
} else {
j++;
if (j != 9) {
i++;
continue;
} else {
b[i] = 1;
a[i] = j;
j = 0;
printf("第%d号が下船しました\n", i);
i++;
c++;
}
}
}
}
}
上記の例を実行すると、出力結果は次のようになります:
第9号下船了 第18号下船了 第27号下船了 第6号下船了 第16号下船了 第26号下船了 第7号下船了 第19号下船了 第30号下船了 第12号下船了 第24号下船了 第8号下船了 第22号下船了 第5号下船了 第23号下船了その他の拡張
C言語実例