您的位置:首页 > 其它

【嵌入式系统学习记录】练习题:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位?

2018-03-11 14:09 344 查看
有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位?
#include<stdio.h>

int main()
{
int i, n;
int number = 0;
int person = 0;
int time = 0;

printf("please enter tne number of monkey:\n");
scanf("%d",&n);

int a
;
int rest = n;
for(i = 0; i < n; ++i) a[i] = i + 1;

while(1)
{
for(i = person - time * n; i < n; ++i)
{
if(a[i] != 0)
{
number++;
if(number % 3 == 0)
{
a[i] = 0;
number = 0;
rest--;
printf("rest is %d\n",rest);
}
}
person++;
printf("the person is all %d\n",person);
}
time++;
printf("turn time is %d\n",time);
if(1 == rest)
{
break;
}
}
for(i = 0; i < n; ++i)
{
if(a[i] != 0)
{
printf("the king is No.%d",a[i]);
}
}

return 0;
}
本程序的难点在于如何实现n个人围成一个圈?程序中通过 number标记号码(1;2;3),标记为3的人置0;index标记报号次数,每n次为一循环;time标记循环次数,将循环体初值设为index- time*n 即可以实现一直报号的情况下,既能保证数组中总数不变,又能使非0的人成为一个新的完整的循环。从而实现了一个圈的效果。
本题是一道经典的游戏题:猴子选大王,参考前辈们的经验顺利完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐