#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;
}
反思:這道題目照着代碼寫了好多遍還寫不對,不是這裏錯了就是哪裏錯了,一點小的錯誤耽誤很多。