//C程序设计第四版(谭浩强)
//章节:第八章 善于利用指针
//题号:8.5
//题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),
//凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
#include <stdio.h>
void pick(int *p,int n)
{
int i,cnt,sum;
for(i=0;i<n;i++)
*(p+i)=1; //起始时所有位置置为1,1表示有人
i=0;
cnt=0; //cnt表示报数器
sum=n; //sum表示在场的人数
while(sum>1)
{
if(*(p+i)==1)
{
cnt++;
if(cnt%3==0)
{
*(p+i)=0; //0表示该位置没有人
cnt=0; //报数器置0,重新报数
sum--; //在场的人数-1
}
}
i++;
i=i%n; //取模运算,从头开始报数
}
for(i=0;i<n;i++)
if(*(p+i)==1)
printf("Position:%d",i+1);
}
int main()
{
int n,a[100];
int *p=a;
printf("how many people:\n");
scanf("%d",&n);
pick(p,n);
return 0;
}
8.5有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
猜你喜欢
转载自blog.csdn.net/weixin_44589540/article/details/86668866
今日推荐
周排行