本文主要是介绍spoj 1108,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
要求输出一个牌的顺序 使每隔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 30000using 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;
}
这篇关于spoj 1108的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!