貪心(貪心)

貪心

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std;
const int maxn = 1e4 + 10;
int n, m, q[maxn];

int main() {
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n;i++)
        scanf("%d",&q[i]);
    while (m--) {
        int k = n - 1;
        while (q[k - 1] > q[k]) k--;//從後往前遍歷,找到第一個可以讓排列的字典序變大的位置
        k--;
        int t = k;
        while (t + 1 < n && q[t + 1] > q[k])//q[k-1]變成比他大的最小數
            t++;
        swap(q[k], q[t]);
        reverse(q + k + 1, q + n);//已經排好了,直接翻轉
    }
    for (int i = 0; i < n; i++)
        printf("%d ", q[i]);
    return 0;
}

反思:這道題目照着代碼寫了好多遍還寫不對,不是這裏錯了就是哪裏錯了,一點小的錯誤耽誤很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章