别看我只是一只羊


私信TA

用户名:bkwzsyzy

访问量:3786

签 名:

等  级
排  名 2321
经  验 2271
参赛次数 1
文章发表 23
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:



解题思路:

     题目重述: 约瑟夫环问题是一个自杀问题。

                 ①在n个人情况下,从1~m报数,凡报到m即退出自杀。

                 ②再次从1(第m+1个) 开始报数,再次报到m(m+m),退出自杀。

                 ③ 依次循环...........

    图解思路

          设有7个人,即a[7],1~3报数。

                 报到3,就出局!!! 

 蓝色为剩余结果,标红3为出局人。

             

         a[7]    0  1  2  3  4  5  6

     第一轮    1  2  3  1  2  1

     结果:    0  1      3  4      6  

     第二轮    3      1  2      3

     结果:    0          3  4

     第三轮    1          2  3

     结果:    0          3     

     第四轮    1          2

     结果:       0          3

     第五轮    3          1

     结果:                3


     注意:结果是3,但位置是4,数组从0开始

  

   思路

    ①设置数组a[n],a[i]为0表示未出局,为1表示出局;

    ②设置dh,用于记录已出局人数,用于退出出局循环;

    ③设置mouth,用于记录报数1~n,每当出局一个人,mouth重新置为1,重新报数;

    ④当a[i]!=1时,即最后一个未出局人。


参考代码:

#includeint main()
{
     int n;
     scanf("%d",&n);
     int a[n];
     for(int i=0;i<n;i++)
     a[i]=0;              //输入n,并将a[]置为0
     
     int dh=0;
     int mouth=1;        //设置退出循环条件,报数初值
     int i=0;
     while(1){         //无限循环,除非遇break
     
         if(dh==n-1)break;     //n-1即只剩最后一人,退出循环
         if(a[i]==1)i++;      //已经出局的人,不做计算,即不报数
         else {
             if(mouth==3){    //满足出局条件
                 a[i]=1;        //标记为出局
                 dh++;         //出局人数累加
               // printf(" %d\n", i);    //输出每个出局顺序
                 mouth=1;      //报数重新置为1
                 
                 i++;        //加1,遍历,循环
             }
             else{
                 mouth++;
                 i++;
                 
             }
         }
         if(i==n)i=0;
         
     }
     int z=0;                   //输出最后 幸存 位置
     for(int i=0;i<n;i++){
        if(a[i]!=1){            
            
           z=i;
         //  printf("%d\n", i);
        }
     
     }
     printf("%d",z+1);
     return 0;
}



本文是对CSDN博主文章理解所写

文章链接:

版权声明:本文为CSDN博主「StazSans」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_61960789/article/details/121764029


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区