题目大意:给出一个序列,以从第一个数到第x个数全部颠倒的方式将这个序列从小到大排序
解题思路:把当前最大的放到最底端,依次循环
#include <cstdio>
#include <iostream>
using namespace std;
#define maxn 1000
int a[maxn];
int cou;
void change(int mx, int p) {
int re;
if(mx != 0) {
re = cou - mx;
cout << re << " ";
for(int i = 0; i < (mx+1)/2; i++) {
int t = a[i];
a[i] = a[mx-i];
a[mx-i] = t;
}
}
re = cou - p;
cout << re << " ";
for(int i = 0; i < (p+1)/2; i++) {
int t = a[i];
a[i] = a[p-i];
a[p-i] = t;
}
}
void output() {
for(int i = 0; i < cou; i++) {
cout << a[i];
if(i != cou-1) {
cout << " ";
}
}
cout << endl;
int p = cou - 1, mx = p;
while(p >= 0) {
for(int i = 0; i < p; i++) {
if(a[mx] <= a[i]) {
mx = i;
}
}
if(mx != p) {
change(mx, p);
}
p--;
mx = p;
}
cout << 0 << endl;
}
int main() {
cou = 0;
while(cin >> a[cou] && a[cou]) {
cou++;
char ch = getchar();
if(ch == '\n') {
output();
cou = 0;
continue;
}
}
return 0;
}