分析:一开始的想法就是每次找到最大的数放到底部,在实现的时候有点麻烦,需要注意一下,因为有可能某个最大元素在中间,这就需要先翻到顶部,再翻到尾部。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<sstream>
using namespace std;
int n,a[33];
void flip(int p) {
for(int i = 0; i < p-i; i++)
swap(a[i], a[p-i]);
printf("%d ", n-p);
}
int main()
{
string s;
while(getline(cin,s)){
cout<<s<<endl;
stringstream ss(s);
n = 0;
while(ss >> a[n])n++;
for(int i=n-1;i>0;i--){
int p=max_element(a,a+i+1)-a;
if(p==i)continue;
if(p>0)flip(p);
flip(i);
}
printf("0\n");
}
return 0;
}