Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

การพิมพ์ k การเรียงสับที่ต่างกันและเรียงลำดับของอาเรย์ที่กำหนดในโปรแกรม C


ได้รับอาเรย์ a[] ที่มี N จำนวนเต็ม ท้าทายคือพิมพ์ k การเรียงสับของดัชนีที่ต่างกัน โดยค่าที่ดัชนีเหล่านั้นสร้างลำดับไม่ลดลง พิมพ์ -1 หากไม่เป็นไปได้

ตัวอย่าง

Input: arr[] = {2,5,6,2,2,2,2}, k = 4
Output:
0 3 4 5 6 1 2
3 0 4 5 6 1 2
0 3 4 5 6 1 2
3 0 4 5 6 1 2

จัดเรียงอาเรย์และบันทึกดัชนีต้นฉบับ ได้การเรียงสับหนึ่งอัน หากมีองค์ประกอบติดกันเท่ากัน สลับกันเพื่อได้อีกอัน

อัลกอริทึม

START
Step 1 -> Declare Function void indice(int n, pair array[])
  Loop For int i=0; i Declare Function void permutation(int n, int a[], int k)
  Use STL pair arr[n]
  Loop for int i=0; i In main()
  Declare array a[]={2,5,6,2,2,2,2}
  Declare int n= sizeof(a)/sizeof(a[0])
  Declare int k=4
  Call permutation(n,a,k)
STOP

ตัวอย่างโค้ด C++

#include 
using namespace std;
void indice(int n, pair array[]){
    for (int i = 0; i < n; i++)
        cout << array[i].second << " ";
    cout << endl;
}
void permutation(int n, int a[], int k){
    pair arr[n];
    for (int i = 0; i < n; i++){
        arr[i].first = a[i];
        arr[i].second = i;
    }
    sort(arr, arr + n);
    int count = 1;
    for (int i = 1; i < n; i++)
        if (arr[i].first == arr[i - 1].first)
            count++;
    if (count < k){
        cout << "-1";
        return;
    }
    for (int i = 0; i < k - 1; i++){
        indice(n, arr);
        for (int j = 1; j < n; j++){
            if (arr[j].first == arr[j - 1].first){
                swap(arr[j], arr[j - 1]);
                break;
            }
        }
    }
    indice(n, arr);
}
int main(){
    int a[] ={2,5,6,2,2,2,2};
    int n = sizeof(a) / sizeof(a[0]);
    int k = 4;
    permutation(n, a, k);
    return 0;
}

ผลลัพธ์

การรันโปรแกรมจะได้ผลลัพธ์ดังนี้:

0 3 4 5 6 1 2
3 0 4 5 6 1 2
0 3 4 5 6 1 2
3 0 4 5 6 1 2