Computer >> Máy Tính >  >> Lập trình >> C ++

Hoán vị lớn nhất sau nhiều nhất k hoán đổi trong C ++

Trong hướng dẫn này, chúng ta sẽ viết một chương trình tìm hoán vị lớn nhất sau nhiều nhất k lần hoán đổi.

Hãy xem các bước để giải quyết vấn đề.

  • Khởi tạo mảng.
  • Khởi tạo một mảng để lưu trữ chỉ mục với kích thước n + 1.
  • Lặp lại trên mảng và lưu trữ chỉ mục của từng phần tử trong mảng vị trí.
  • Viết một vòng lặp lặp lại cho đến khi n và k lớn hơn 0.
    • Lưu trữ vị trí của phần tử n - i trong một biến tạm thời.
    • Cập nhật vị trí của phần tử hiện tại arr [i] với vị trí [n - i].
    • Cập nhật vị trí vị trí [n - i] với chỉ số hiện tại i.
    • Hoán đổi phần tử hiện tại arr [i] với arr [temp.Decrement k.
  • In các phần tử của mảng.

Ví dụ

Hãy xem mã.

#include <bits/stdc++.h>
using namespace std;
void getLargestPermutation(int arr[], int n, int k) {
   int position[n + 1];
   for (int i = 0; i < n; ++i) {
      position[arr[i]] = i;
   }
   for (int i = 0; i < n && k; ++i) {
      if (arr[i] == n - i) {
         continue;
      }
      int temp = position[n - i];
      position[arr[i]] = position[n - i];
      position[n - i] = i;
      swap(arr[temp], arr[i]);
      --k;
   }
}
int main() {
   int arr[] = { 5, 3, 2, 6, 7, 1, 4 };
   int n = 7, k = 3;
   getLargestPermutation(arr, n, k);
   for (int i = 0; i < n; ++i) {
      cout << arr[i];
   }
   cout << endl;
   return 0;
}

Đầu ra

Nếu bạn chạy đoạn mã trên, thì bạn sẽ nhận được kết quả sau.

7653214

Kết luận

Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.