首页 > 技术文章 > P1996 约瑟夫问题

xiaoyezi-wink 2019-04-11 20:46 原文

P1996 约瑟夫问题

广度优先搜索

我竟然寄几做对了

 

这个题用到了队列

 

下面详细解释:

我的代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int a[100000];
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
      a[i]=i;
    int h=0,t=n,num=0,t1=0;   //h 为队列的头,t为队列的尾,num记录送走了几个人,t1表示报数的数码;
    while(num<n)   //注意第一个走的人标号是0(如果是num<=n,就相当于多输出一个无用的0)
    {
        h++;   //指向人
        t1++;  //开始报数
        if(t1!=m)  //这个人不用走
        {
            t++;   //开一个格子
            a[t]=a[h];   //把他转移到队尾
        }
        else     //这个人要走
        {
            printf("%d ",a[h]);   //输出这个人
            t1=0;   //重新报数
            num++;  //记录走的人数
        }
    }
    
    return 0;
}

 

白树上的代码真的是晦涩难懂。。不敲了

 


 柏树原题

题还是得多敲几遍。。

泥看我过了一天就不会做了。。

 

推荐阅读