考点:排序
通过翻转操作对1~N进行排序
思路:见题目备注
#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE=1001;
int main() {
int n;
while(cin>>n) {
if(n==0) {
break;
}
int a[n+1];
for(int i=1; i<=n; i++) {
cin>>a[i];
}
int p,ans=0;
vector<int> v;
for(int j=n; j>=2; j--) {
for(int i=1; i<=n; i++) {
if(a[i]==j) {
p=i;
break;
}
}
if(p==j) {
continue;
} else if(p==1) {
reverse(a+1,a+j+1);
v.push_back(j);
ans++;
} else {
reverse(a+1,a+p+1);
v.push_back(p);
ans++;
reverse(a+1,a+j+1);
v.push_back(j);
ans++;
}
}
cout<<ans;
for(int i=0; i<v.size(); i++) {
cout<<" "<<v[i];
}
cout<<endl;
}
return 0;
}