*约瑟夫问题。这是十七世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:30个人围成一个圆

*约瑟夫问题。这是十七世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个基督教徒和15个异教徒在海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:30个人围成一个圆圈,从第一个人开始依次报数,每数到第9个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是异教徒。
本题示例为 @ @ @ @ + + + + + @ @ + @ @ @ + @ + + @ @ + + + @ + + @ @ + (第一个人前无空格,每人中间1个空格)
**输出格式要求:“The original circle is (+:papandom, @:christian);\n” "%c "

#include

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("@ ");
	}
}

你可能感兴趣的:(C,C语言答案,c语言,c语言)