約瑟夫環成績(數組法)c說話完成。本站提示廣大學習愛好者:(約瑟夫環成績(數組法)c說話完成)文章只能為提供參考,不一定能成為您想要的結果。以下是約瑟夫環成績(數組法)c說話完成正文
成績解釋
這個成績是以弗拉維奧·約瑟夫斯定名的,它是1世紀的一位猶太汗青學家。他在本身的日志中寫道,他和他的40個戰友被羅馬部隊包抄在洞中。他們評論辯論是他殺照樣被俘,終究決議他殺,並以抽簽的方法決議誰殺失落誰。約瑟夫斯和別的一小我是最初兩個留下的人。約瑟夫斯壓服了誰人人,他們將向羅馬部隊屈膝投降,不再他殺。約瑟夫斯把他的存活歸因於命運運限或天意,他不曉得是哪個機靈的約瑟夫!
有N個編號為1~N的人圍成一圈,如今每隔兩小我(好比:1、4 之距離了2、3)就將一小我镌汰出去,問最初剩下的是編號為幾的人?
算法代碼以下
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int people_count = 0;
int *peoples = NULL;
printf("please input people number: ");
scanf("%d", &people_count);
if (people_count < 2){
printf("can't do Joseph\n");
}
peoples = (int *)calloc(people_count, sizeof(int));
int i;
for(i = 0; i < people_count; i++){
peoples[i] = i+1;
}
i = 0;
int j = 0;
int rest = people_count;
while(rest){
if (i >= people_count){
i %= people_count;
}
if (peoples[i] == 0){
i++;
continue;
}
if (j++ % 3 ==0 && rest > 1){
printf("kill people NO. %d\n", peoples[i]);
peoples[i] = 0;
rest--;
}else if (rest==1){
printf("NO. %d is alive\n", peoples[i]);
rest--;
}
i++;
}
system("pause");
return 0;
}