题目链接: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;
}