解题思路:

ACM刚起步挫折不断啊

看的Wu的题解 豁然开朗


参考                问题 1047: C语言程序设计教程(第三版)课后习题10.5

注意事项:

Again





参考代码:

#include<iostream>
using namespace std;
void line(int n,int m)

{

    int a[1000],i,num=0,s;                   //提供足够大的循环条件

    for(i=0;i<1000;i++)

    {

        a[i]=1;                                     //这里存储都为1,其实最后用下标 i 来获取每个人的数字

    }

    s=n;                                           //记录总人数

    i=0;

    while(n>1)

    {

        if(a[i]==1)

        {

            num++;                              //num来记录是否为第m个

        }

        if(num==m)                              //num==m时 a[i]=0,表示删除该位置,但是循环时i   仍计算该位置

        {

           a[i]=0;

            num=0;

            n=n-1;                    //控制循环条件n>1

        }

        i++;                              

        if(i==s)                           //循环到头,重头再次循环

        {

            i=0;

        }

    }

    for(i=0;i<s;i++)

    {

        if(a[i]==1)

        cout<<i+1<<endl;                 //i下标为0,所以+1

    }

}

int main()

{

    int m,n;

    while(cin>>n>>m)     //循环输出多组

    {

        line(n,m);

    }

    return 0;

}

 

点赞(14)
 

0.0分

3 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论