*约瑟夫问题。这是十七世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:30个人围成一个圆圈,从第一个人开始依次报数,每数到第9个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是异教徒。
本题示例为 @ @ @ @ + + + + + @ @ + @ @ @ + @ + + @ @ + + + @ + + @ @ + (第一个人前无空格,每人中间1个空格)
**输出格式要求:“The original circle is (+:papandom, @:christian);\n” "%c "
#include<stdio.h>
int main() {
int i, j, n;
//数组当中某元素为0表示该人在船上,为1表示该人已被扔下去
int person[30] = {
0 };
int count = 0, num = 0; //count用于0-9报数的计数,num用于计数扔下船的人数
while (num != 15) {
for (i = 0; i < 30; i++) {
if (person[i] == 0) {
//当这个位置的人在船上,报一次数
count++;
if (count == 9) {
//当这个人报数为9,扔下去,计数器归零
count = 0;
person[i] = 1;
num++;
}
}
}
}
printf("The original circle is (+:papandom, @:christian);\n");
for (i = 0; i < 30; i++) {
if (person[i] == 1)
printf("+ ");
else
printf("@ ");
}
}