P1996 约瑟夫问题
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; }
白树上的代码真的是晦涩难懂。。不敲了
题还是得多敲几遍。。
泥看我过了一天就不会做了。。