P1996 约瑟夫问题
广度优先搜索
我竟然寄几做对了
这个题用到了队列
下面详细解释:
我的代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int a[];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
a[i]=i;
int h=,t=n,num=,t1=; //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=; //重新报数
num++; //记录走的人数
}
} return ;
}
白树上的代码真的是晦涩难懂。。不敲了
题还是得多敲几遍。。
泥看我过了一天就不会做了。。