要求输出一个牌的顺序 使每隔1、2、.....、n翻牌后出现1 2 3 4 5 6 7 8 9 .... n
将牌想象成n个空格 正向推 空n个位置放n 循环 需优化
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define maxn 30000
using namespace std;
int a[maxn],n;
int fff(int b, int t ,int c)
{
int j = 0;
while(1)
{
if(c == n)
c = 0;
if(!a[++c])
j++;
if(j == b)
break;
}
a[c] = t;
return c;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int b = 0;
int c = 0;
memset(a, 0, sizeof(a));
for(int i = 0; i < n; i++)
{
b = n-i;
c = fff((i+1)%b+1, i+1, c);
}
for(int i = 1; i < n; i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[n]);
}
return 0;
}