題目鏈接:http://acm.nyist.net/JudgeOnline/problem.php?pid=714
此題是河南省ACM省賽的題,基本上都做出來了;
題目大意是:有n張牌,找到一個順序,使得第一次把上面一張取出放到最下面,然後取出最上面一張是一,第i次把上面i張取出放到最下面,然後取出一張是i;
本題也沒啥技巧,就是模擬;
參考代碼如下:
#include <iostream>
#include <cstring>
using namespace std;
int a[14];
int flag[14];
int n;
void execute()
{
if(n==1)
{
cout<<1<<endl;
return ;
}
memset(flag,0,sizeof(flag));
int i,len=0,t=1,k=0,sum=0;
while(len<n)
{
while(sum!=t+1)
{
k++;
if(k==n+1)
k=1;
if(flag[k]==0)
sum++;
}
a[k]=t;
flag[k]=1;
t++;
sum=0;
len++;
}
for(i=1;i<=n;i++)
cout<<a[i]<<' ';
cout<<endl;
}
int main()
{
int T;
cin>>T;
while(T--)
{
cin>>n;
execute();
}
return 0;
}