解题思路:创建一个数组,根据输入的人数往数组中存放每个人的编号,虽然没办法直接删除数组中的元素,但编号是从1开始的,也就是说当报数到3的时候,可以通过将那个编号变为0的方式达到退出的效果(变为其他数也行,不和编号冲突就没问题),当数组中只剩下一个非0的数时,那个数就是最后留下来的人的编号。


              


注意事项:


参考代码:

#include


int main()

{

     int n;//总人数

     scanf("%d",&n);

     int a[10000]={0};//创建一个数组

     for(int b=0;b<n;b++){//从a[0]开始依次将1~n存入数组中

          a[b]=b+1;

     }

     int z=0;//判断报数次数

     int zero=n-1;//需要退出的人数,需要退出(总人数-1)个人,就留一个人

     while(zero)//zero为0时结束循环,zero为0就意味着只有一人没有退出了

     {

          for(int b=0;b<n;b++){//读取数组中的数,每读取一次非0的数z就+1,意味着报数次数+1,z为3时就把那个数组的数变为0,相当于题目中的退出

             if(a[b]!=0)//当读取数组中的数为0时就不加报数次数

             {

                 z++;

             }

             if(3==z)

             {

                 a[b]=0;//该编号退出

                 z=0;//z初始化为0,相当于报数到3时重新开始报数

                 zero--;

             }

         }

     }

     for(int b=0;b<n;b++){

         if(a[b]!=0)//此时数组中还有一个数不为0,即最后留下的人的编号

         {

             printf("%d",a[b]);

             return 0;//找到那个数就可以结束循环了

         }

     }

     return 0;

}


点赞(0)
 

0.0分

1 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论