Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

约瑟夫

暴力枚举m的值就行了,怕超时的话就打表

我的代码
 1 #include <stdio.h>
2 const int N=30;
3 int f[14];//={0,2,7,5,30,169,441,1872,7632,1740,93313,459901,1358657,2504881};
4 int k;
5 int ok(int m)
6 {
7 int n=2*k;
8 int flag[N]={0};
9 int i,t,p=0;
10 for (i=0;i<k;i++)
11 {
12 t=m%(n-i);
13 if (t==0) t=n-i;
14 while (t--)
15 {
16 p++;
17 while (flag[p]) p++;
18 if (p>n) p=1;
19 }
20 if (p<=k) return 0;
21 flag[p]=1;
22 }
23 return 1;
24 }
25 void init()
26 {
27 for (k=1;k<14;k++)
28 {
29 int i=k+1;
30 while (!ok(i)) i++;
31 f[k]=i;
32 }
33 }
34 int main()
35 {
36 init();
37 while (scanf("%d",&k) && k) printf("%d\n",f[k]);
38 return 0;
39 }

 

posted on 2011-11-29 21:14  Qiuqiqiu  阅读(411)  评论(0编辑  收藏  举报