标题:N个人围成一圈的一道题(问题更新)
只看楼主
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
 问题点数:0 回复次数:4 
N个人围成一圈的一道题(问题更新)
题目如下: 有N个人围成一圈,顺序排号.从第一个人开始报数,从1报到3,凡报到3的人退出圈子,问最后留下的是原来第几号的那位.

程序如下:
main()
{
int *p,num[20],i,k,m,n;
p=num;
scanf("%d",&n);
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0; //i为每次循环时的计数变量
m=0; //m为退出人数
k=0; //k为按1,2,3报数时的计数变量
while(m<n-1) //当未退出人数>1时
{
if(*(p+i)!=0)
k++;
if(k==3) //对退出的人的编号置0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) //报数到最后,i恢复为0
i=0;
}
while(*p==0) //请问这句话是什么意思? *p不是指向num数组的首地址吗,怎么会是0?
p++; //这句话又是什么意思? (我知道最后输出的*p是最后留在圈子里的人,但是用这语句判断我看不懂,望请教)
printf("%d",*p);
}

[此贴子已经被作者于2006-9-18 23:47:34编辑过]

搜索更多相关主题的帖子: 变量 num int main 
2006-09-18 23:19
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
以下是引用forice在2006-9-18 23:19:02的发言:
题目如下: 有N个人围成一圈,顺序排号.从第一个人开始报数,从1报到3,凡报到3的人退出圈子,问最后留下的是原来第几号的那位.

程序如下:
main()
{
int *p,num[20],i,k,m,n;
p=num;
scanf("%d",&n);
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0; //i为每次循环时的计数变量
m=0; //m为退出人数
k=0; //k为按1,2,3报数时的计数变量
while(m<n-1) //当未退出人数>1时
{
if(*(p+i)!=0)
k++;
if(k==3) //对退出的人的编号置0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n) //报数到最后,i恢复为0
i=0;
}
while(*p==0) //请问这句话是什么意思? *p不是指向num数组的首地址吗,怎么会是0?
p++; //这句话又是什么意思? (我知道最后输出的*p是最后留在圈子里的人,但是用这语句判断我看不懂,望请教)
printf("%d",*p);
}

它把出队的位置置为0,当做完(只剩一个人)的时候,只要找出数组中哪个位置不为0则表示那个人是最后一个.
用循环就是找那个人,刚开始p-->a[0],指针的移动等价i的增加,只不过同时也改变了p.
这个循环等价于
i=0;
while(*(p+i)==0)
{
i++;
}
printf("%d",*(p+i));


倚天照海花无数,流水高山心自知。
2006-09-18 23:28
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
得分:0 
非常明白,感谢
2006-09-18 23:35
forice
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2005-8-25
得分:0 
对了,还有一个小问题,就是p->&num;
这个跟序数n有什么关联,它们是用什么联系起来的?
就是说p指向num数组,但是num数组里边的内容都不知道是什么.num跟n有什么关系?
2006-09-18 23:47
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
n是num[]的元素个数,p和num[]等价.根据下标来表示是否数到3了(当然要跳过已经出队的,这里给元素赋0做标记).

倚天照海花无数,流水高山心自知。
2006-09-19 12:52



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-91117-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.066345 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved