#include<stdio.h> int a[102], b[102], c[2000], i, step, n, num = 1, max; int getmax(int a[], int n){ int temp, max = n; for(int i = 1; i < n; i++) if(a[i] > a[max]) max = i; return max; }//查询最大数的位置 int main(){ while(scanf("%d", &a[num]) != EOF) { while(getchar() != '\n') { ++ num; scanf("%d", &a[num]); }//输入一组数字 for(i = 1;i < num; i++) printf("%d ", a[i]); printf("%d\n", a[num]); n = num; step = 0; while(n > 0) { max = getmax(a, n); if(max < n) { if(max != 1) { ++ step; c[step] = num + 1 - max; for(i = 1;i <= max; i++) b[max - i + 1] = a[i]; for(i = 1;i <= max; i++) a[i] = b[i];//前两个for循环是反转最大数位置(包括最大数)以前的数据 } for(i = 1;i <= n; i++) b[n - i + 1] = a[i]; for(i = 1;i <= n; i++) a[i] = b[i];//后两个for循环是整组数据反转 ++ step; c[step] = num - n + 1; } -- n; } for(i = 1;i <= step; i++) printf("%d ", c[i]); printf("0\n"); num = 1; } return 0; }