自己首先写了程序,想了好长时间的节省时间到最后还是超市,后来后来只好暴力啦!因为k是小于14的,所以就开了一个数组将前14个的值记下来然后提交上去0MS过了,不过也没有一点自豪感啊!
超时的代码:
#include<iostream> using namespace std; int main() { int k,i,m,j,l,r; bool vis[30]; while(1) { scanf("%d",&k); if(k==0) break; int sign=0; for(r=k+1; ; r+=k+1) { for(i=r; i<=r+1; i++) { int t=i; for(j=k+1; j<=2*k; j++) vis[j]=false; m=2*k; while(1) { t=t%m; if(t==0) t=m; if(t<=k)//此时就是取得前面的数的 break; t=t-k; for(j=k+1; j<=2*k; j++) if(vis[j]==false) { t--; if(t==0) { vis[j]=true; m--; t=i; // t=i-(m-k); for(l=j+1; l<=2*k; l++) { if(vis[l]==false) t--; } if(m==k) goto xy; break; } } } } } xy: printf("%d\n",i); } return 0; }
超级超级暴力的代码啊!:
#include<iostream> using namespace std; int main() { int a[15],k; a[1]=2; a[2]=7; a[3]=5; a[4]=30; a[5]=169; a[6]=441; a[7]=1872; a[8]=7632; a[9]=1740; a[10]=93313; a[11]=459901; a[12]=1358657; a[13]=2504881; a[14]=13482720; while(1) { cin>>k; if(k==0) break; cout<<a[k]<<endl; } return 0; }