标签:
题目大意:这题的题目是错的,他的第二个操作是把最后一个调到第一个,然后输出时要逆序输出
解题思路:类似冒泡排序法。先如果第一个是n的话,就调后面的到前面来,然后进行比较,取最大的放前面,这下下一次n到前面的时候,n-1就在n的后面了。
#include<cstdio>
#include<vector>
#include<deque>
#define maxn 310
using namespace std;
int num[maxn], n;
deque<int> dq;
vector<int> ans;
bool judge() {
for(int i = 1; i <= n; i++)
if(dq[i - 1] != i)
return false;
return true;
}
int main() {
while(scanf("%d", &n) == 1 && n) {
dq.clear();
ans.clear();
int t;
for(int i = 1; i <= n; i++) {
scanf("%d", &t);
dq.push_back(t);
}
int MAX = 2 * n * n;
for(int i = 0; i <= MAX; i++) {
int x = dq[0];
int y = dq[1];
if(x == 1 && judge()) {
break;
}
if(x > y && x != n) {
ans.push_back(1);
swap(dq[0],dq[1]);
}
else {
ans.push_back(2);
t = dq.back();
dq.pop_back();
dq.push_front(t);
}
}
for(int i = ans.size() - 1; i >= 0; i--)
printf("%d", ans[i]);
printf("\n");
}
return 0;
}
UVA - 11925 Generating Permutations 推理
标签:
原文地址:http://blog.csdn.net/l123012013048/article/details/45501005