- 相關(guān)推薦
C語(yǔ)言用數(shù)組解決約瑟夫環(huán)問(wèn)題
問(wèn)題說(shuō)明:
在羅馬人占領(lǐng)喬塔帕特后,39 個(gè)猶太人與約瑟夫及他的朋友躲到一個(gè)洞中,大家決定寧愿自殺也不要被敵人抓到,于是確定了一個(gè)自殺方式,41個(gè)人排成一個(gè)圓圈,由第1個(gè)人開(kāi)始報(bào)數(shù),每報(bào)數(shù)到第3人該人就必須自殺,然后再由下一個(gè)重新報(bào)數(shù),直到所有人都自殺身亡為止。然而約瑟夫和他的朋友并不想死去,那么他應(yīng)該怎樣安排他和他的朋友的位置,才能逃脫這場(chǎng)死亡游戲呢?
有N個(gè)編號(hào)為1~N的人圍成一圈,現(xiàn)在每隔兩個(gè)人(比如:1、4 之間隔了2、3)就將一個(gè)人淘汰出去,問(wèn)最后剩下的是編號(hào)為幾的人?
算法代碼如下:
#include
#include
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;
}
【C語(yǔ)言用數(shù)組解決約瑟夫環(huán)問(wèn)題】相關(guān)文章:
C語(yǔ)言的循環(huán)鏈表和約瑟夫環(huán)09-29
關(guān)于c語(yǔ)言約瑟夫問(wèn)題輸出序號(hào)算法10-16
C語(yǔ)言數(shù)組教程08-31
什么是C語(yǔ)言數(shù)組10-03
C語(yǔ)言數(shù)組與指針詳解08-15
C語(yǔ)言數(shù)組的定義及引用08-05
C語(yǔ)言數(shù)組方法08-06
C語(yǔ)言數(shù)組元素的查詢08-02