有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出 圈子,问最后留下的是原 5

 我来答
帖承德qv
推荐于2017-11-25 · TA获得超过645个赞
知道小有建树答主
回答量:95
采纳率:100%
帮助的人:76.4万
展开全部
呵呵,同一个人啊
我还是贴出来吧
#include<stdio.h>
void main()
{
int i,k,m,n,num[50],*p;
printf("input number of person: n=");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(m<n-1)//m是指出局的人数,因为有n个人,最后剩下一个人,所以最多出局(n-1)个人,构成循环
{
if(*(p+i)!=0)//判断这个号(原来的序号)是否出局
k++;//这个号没有出局,就报数,计数器加1
if(k==3)//报3的出局
{
*(p+i)=0;//将出局的这个人标记
k=0;//使计数器置零,以便后面的人报数
m++;//出局人数计数器加1
}
i++;//将指针后移,虽然i不是指针,但p+i就是指针了,所以i就是为指针服务的
if(i==n)//如果指针移到了尾部,则返回到头部
i=0;
}
//以上的循环是主要焦点,后面的就是找出最后那个人,这个好理解

while(*p==0)//用这个可以只判断所找号的前面的号(包括所找号),不用判断后面的。
p++;
printf("The last one is N0.%d\n",*p);
}
聪慧且机智的萨摩
2012-04-18
知道答主
回答量:6
采纳率:0%
帮助的人:3.4万
展开全部
# include <stdio.h>
void main()
{
int n, i, k, m, a[100];
int *p;
p = a;
printf("请输入人数:");
scanf("%d", &n);
for(i = 0; i < n; i++)
a[i] = i + 1;
i = 0; k = 0; m = 0;
while(m < n-1)
{
if(a[i] != 0) k++;
if(k == 3)
{
a[i] = 0;
k = 0;
m++;
}
i++;
if(i == n) i = 0;
}
while(!(*p)) p++;
printf("最后留下的是原来第%d号的那位\n",*p);
}
希望对你有帮助!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
徐临祥
高粉答主

2019-12-23 · 醉心答题,欢迎关注
知道小有建树答主
回答量:3380
采纳率:96%
帮助的人:92.5万
展开全部
第一步:设计一个数组A[n],将数组的元素全部初始为0.
第二步:循环计数i和j,如果A[i]全为0则j到3就让A[i]=1,如果中间有A[i]=1,跳过这个计数,j继续增长直到3再执行A[i]=1
第三步:在第二步的同时判断i是否循环到数组的终点,即不能超过A的长度,否则将i置0继续循环遍历数组,执行第二步。
第四步:输出最后一个元素的位置+1就是最后一个人 (因为数组是从0开始计数的)
0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式