| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 408 人关注过本帖
标题:求助!求助!n个人围成一圈,顺序排号。这个问题有几行没想明白??
只看楼主 加入收藏
autumnyellow
Rank: 2
等 级:论坛游民
帖 子:72
专家分:75
注 册:2015-4-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
求助!求助!n个人围成一圈,顺序排号。这个问题有几行没想明白??
*n个人围成一圈,顺序排号。从第1个人开始报数(从1 到3)凡报到3的人退出圈子,问最后留下是原来的第几号
*/
#include<stdio.h>
int main ()
{
    int i,k,m,n,num[50],*p;
    printf("\ninput number of person:n=");
    scanf_s("%d",&n);
    p=num;
    for(i=0;i<n;i++)
        *(p+i)=i+1;   //从1 到n为每个人编号
    i=0;  //i为每次循环计数变量
    k=0;  //k为报1,2,3的计数变量
    m=0;  //m为退出人数
    while(m<n-1)//当剩下1个人时,退出循环
    {
        if(*(p+i)!=0)
            k++;
        if(k==3)
        {
            *(p+i)=0;//对退出人编号为0
            k=0;
            m++;
        }
        i++;
        if(i==n)
            i=0;//报到尾数i恢复0
    }
    while(*p==0)
               p++;   //这两行没弄明白怎么回事????怎么成了最后1人的号了????
    printf("The last one is NO.%d",*p);
    return 0;
}


/*
input number of person:n=8
The last one is NO.7
请按任意键继续. . .*/
2015-09-06 09:29
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:20 
程序代码:
  while(m<n-1)//当剩下1个人时,退出循环
    {
        if(*(p+i)!=0)
            k++;
        if(k==3)
        {
            *(p+i)=0;//对退出人编号为0
            k=0;
            m++;
        }
//        i++;
//        if(i==n)
//            i=0;//报到尾数i恢复0
            i=(i+1)%n;
    }
    while(*p==0)
               p++;   //这两行没弄明白怎么回事????怎么成了最后1人的号了????
    printf("The last one is NO.%d",*p);
    return 0;

当剩下1个人时,退出循环,那么只剩一个人的号了。。。。

剑栈风樯各苦辛,别时冰雪到时春
2015-09-06 09:53
autumnyellow
Rank: 2
等 级:论坛游民
帖 子:72
专家分:75
注 册:2015-4-14
收藏
得分:0 
回复 2楼 林月儿
姐姐,我是自学的,能不能说详细些,没想明白p++是怎么确定是哪个号的
2015-09-06 10:01
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 3楼 autumnyellow
遍历啊,从第一个人遍历,直到*(p)!=0停止。。。指针没学过吗?
就像java里面的类体引用啦,不好意思很久没看C,最近看的java多一点所以参照着说了

剑栈风樯各苦辛,别时冰雪到时春
2015-09-06 10:20
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
第一个循环退出时将只剩下最后一个人其他所有人都被赋值为0

一片落叶掉进了回忆的流年。
2015-09-06 10:31
快速回复:求助!求助!n个人围成一圈,顺序排号。这个问题有几行没想明白??
数据加载中...
 
   



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

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