UVA 120Stacks of Flapjacks

来源:互联网 发布:淘宝买宠物狗 编辑:程序博客网 时间:2024/05/16 14:55

题目大意:给出一个序列,以从第一个数到第x个数全部颠倒的方式将这个序列从小到大排序

解题思路:把当前最大的放到最底端,依次循环

#include <cstdio>#include <iostream>using namespace std;#define maxn 1000int 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;}