本帖最后由 万里天 于 2015-2-24 09:02 编辑
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。
int str[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int number = 13,count = 0,i =0;
while (number > 1) { //number 表示人数
if (str != 0) {
count++;
}
if (count == 3) {//如果count的值为3,则表示报到的数为"3"
str = 0; //此时将此人的值赋值为0,表示此人已经排除
count = 0;//count重新赋值为0
number--;//人数减1
}
i++;
if (i ==13) {//由于是围成一圈,当值等于13时,强制将其设置为0
i = 0;
}
}
printf("出卖耶稣叛徒的序号为:");
for (int i = 0; i< 13; i ++) {
if (str > 0) {
printf("%d ",str);
}
} |
|