H2330819064


私信TA

用户名:dotcpp0701282

访问量:398

签 名:

找luogu玩去了,告辞

等  级
排  名 297
经  验 5604
参赛次数 0
文章发表 2
年  龄 0
在职情况 学生
学  校 贺州学院
专  业

  自我简介:

TA的其他文章

解题思路:创建一个数组,根据输入的人数往数组中存放每个人的编号,虽然没办法直接删除数组中的元素,但编号是从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分

1 人评分

  评论区

  • «
  • »