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

Sắp xếp lại N số đầu tiên để chúng ở khoảng cách K trong C ++

Chúng ta được cung cấp các biến số nguyên, giả sử N và K. Nhiệm vụ trước tiên là tính toán hoán vị của N và sau đó sắp xếp lại hoán vị sao cho nó cách mọi phần tử là K khoảng cách.

Hãy để chúng tôi xem các kịch bản đầu ra đầu vào khác nhau cho việc này -

Đầu vào - int n =20, int k =2

Đầu ra - Sắp xếp lại N số đầu tiên để chúng cách K là:3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18.

Giải thích - chúng ta được cung cấp các biến số nguyên 'N' tức là 20 và 'K' tức là 2. Bây giờ chúng ta sẽ tính toán hoán vị của 'N' tức là 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 , 12, 13, 14, 15, 16, 17, 18. 19, 20. Bây giờ, chúng ta sẽ sắp xếp các phần tử theo cách mà tất cả các phần tử sẽ ở khoảng cách 'k' với mọi phần tử.

Đầu vào - int n =10, int k =3

Đầu ra - Sắp xếp lại N số đầu tiên để chúng có khoảng cách K là:Không thể

Giải thích - chúng ta được cung cấp các biến số nguyên 'N' tức là 10 và 'K' tức là 3. Bây giờ chúng ta sẽ tính toán hoán vị của 'N' tức là 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Bây giờ , chúng tôi sẽ sắp xếp các phần tử theo cách mà tất cả các phần tử sẽ ở khoảng cách 'k' với mọi phần tử nhưng không thể với các giá trị đầu vào đã cho.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập một phần tử kiểu số nguyên, tức là ‘N’ và ‘K’.

  • Gọi hàm Sắp xếp lại (int n, int k) bằng cách chuyển N và K cho một hàm dưới dạng tham số.

  • Bên trong hàm Sắp xếp lại (int n, int k)

    • Khai báo một biến số nguyên dưới dạng tạm thời và đặt nó bằng n% (2 * k).

    • Khai báo mảng kiểu số nguyên dưới dạng ptr có kích thước n + 1 tức là prt [n + 1].

    • Kiểm tra IF k =0 rồi bắt đầu vòng lặp FOR từ i đến 1 cho đến khi tôi nhỏ hơn kích thước và tăng i lên 1 và in i.

    • Kiểm tra NẾU nhiệt độ không bằng 0 thì in KHÔNG CÓ THỂ.

    • Bắt đầu vòng lặp FOR từ i đến 1 cho đến khi tôi nhỏ hơn N và đặt ptr [i] bằng i.

    • Bắt đầu vòng lặp FOR từ i đến 1 cho đến khi tôi nhỏ hơn n và đặt i với i + 2 * k. Bên trong vòng lặp, bắt đầu một vòng lặp FOR khác từ j đến 1 cho đến khi j nhỏ hơn k và tăng j lên 1. Bên trong vòng lặp, gọi một phương thức swa bằng cách chuyển ptr [i + j -1] và ptr [k + i + j - 1] như một tham số.

    • Bắt đầu vòng lặp FOR từ i đến 1 tll i nhỏ hơn N và tăng i lên 1.

    • In prt [i].

  • In kết quả.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
void Rearrangement(int n, int k){
   int temp = n % (2 * k);
   int ptr[n + 1];
   if(k == 0){
      for(int i = 1; i <= n; i++){
         cout << i << " ";
      }
      return;
   }
   if(temp != 0){
      cout<<"Not Possible";
      return;
   }
   for(int i = 1; i <= n; i++){
      ptr[i] = i;
   }
   for(int i = 1; i <= n; i += 2 * k){
      for(int j = 1; j <= k; j++){
         swap(ptr[i + j - 1], ptr[k + i + j - 1]);
      }
   }
   for(int i = 1; i <= n; i++){
      cout << ptr[i] << " ";
   }
}
int main(){
   int n = 20;
   int k = 2;
   cout<<"Rearrangement of first N numbers to make them at K distance is: ";
   Rearrangement(n, k);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

Rearrangement of first N numbers to make them at K distance is: 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18