模拟题
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int ori[40];
int sorted[40];
int data[40];
int n;
vector<int> result;
bool is_sorted() {
int i;
for (i=0;i<n-1;i++) {
if (data[i]>data[i+1])
return false;
}
return true;
}
void flip(int num) {
int i,j,tmp;
j=num;
i=0;
while (i<j) {
tmp=data[i];
data[i]=data[j];
data[j]=tmp;
i++;
j--;
}
}
int main() {
int i,j;
int k,last;
while (scanf("%d",&ori[0])!=EOF) {
n=1;
if (getchar()!='\n') {
while (scanf("%d", &ori[n++]))
if (getchar()=='\n')
break;
}
for (i=0;i<n;i++) {
sorted[i]=ori[i];
data[i]=ori[i];
}
result.clear();
sort(sorted, sorted+n);
last=n-1;
while (is_sorted()==false) {
i=n-1;
while (i>=0&&data[i]!=sorted[last])
i--;
if (i==0) {
flip(last);
result.push_back(last);
last--;
}
else {
flip(i);
result.push_back(i);
flip(last);
result.push_back(last);
last--;
}
}
for (i=0;i<n-1;i++)
printf("%d ", ori[i]);
printf("%d\n", ori[i]);
for (i=0;i<result.size();i++)
printf("%d ", n-result[i]);
printf("0\n");
}
return 0;
}