我是直接模擬的,因爲實在想不到什麼好辦法,不過看到0<k<14,
俗話說得好,不管黑貓白貓,抓到老鼠的就是好貓。
於是在自家電腦模擬,打個表,就AC了。
至於還有沒有其他方法,有待研究,大家有什麼好方法,請賜教,謝謝!
1、模擬:
方法是,m從2開始判斷,在1,2,3,······,2k中,每次找到第m個數,判斷如果是大於k的,
那麼後面的數就向前移,否則m++,直至找到這樣的m,使得找出的k個數都是大於k,
這個m就是要找的最小的m。(也可以使用鏈表,不過本人還沒學過鏈表,所以不在這介紹了,
可參考百度百科:http://baike.baidu.com/view/213217.htm?fr=aladdin
#include<stdio.h>
int main()
{
int k,m,i,n,x,j;
int a[27];
bool bo;
scanf("%d",&k);
while(k)
{
for (i=1;i<=2*k;i++) a[i]=i;
m=1;
bo=false;
while(!bo)
{
m++;x=1;bo=true;
for (i=2*k;i>=k+1;i--)
{
n=m%i;
if (n==0) n=i;
n=(n+x-1)%i;
if (n==0) n=i;
if (a[n]<=k)
{
bo=false;
break;
}
for (j=n;j<i;j++) a[j]=a[j+1];
x=n;
}
}
printf("%d\n",m);
scanf("%d",&k);
}
return 0;
}
2、絕對0s算法:
#include<stdio.h>
int main()
{
int k,a[13]={2,7,5,30,169,441,1872,7632,1740,93313,459901,1358657,2504881};
scanf("%d",&k);
while(k)
{
printf("%d\n",a[k-1]);
scanf("%d",&k);
}
return 0;
}