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

Tìm hoán vị tốt của N số tự nhiên đầu tiên trong C ++

Trong bài toán này, chúng tôi là một giá trị nguyên N. Nhiệm vụ của chúng tôi là tìm hoán vị tốt của N số tự nhiên đầu tiên .

hoán vị là sự sắp xếp của tất cả hoặc một phần của một tập hợp các đối tượng, liên quan đến thứ tự của sự sắp xếp.

Hoán vị tốt là một hoán vị trong đó $ 1 \ leqslant {i} \ leqslant {N} $ và theo sau,

$ P_ {pi} \:=\:i $

$ P_ {p!} \:=\:I $

Hãy lấy một ví dụ để hiểu vấn đề,

Input : N = 1
Output : -1

Phương pháp tiếp cận giải pháp

Một giải pháp đơn giản cho vấn đề là tìm hoán vị p sao cho p i =tôi.

Sau đó, chúng tôi sẽ xem xét lại phương trình để thỏa mãn p i ! =i. Vì vậy, với giá trị x sao cho $ 2x \ leqslant x $, chúng ta có p 2x - 1 và p 2k . Bây giờ, chúng ta có một phương trình thỏa mãn phương trình hoán vị cho n. Đây, lời giải cho phương trình.


Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi

#include <iostream>
using namespace std;
void printGoodPermutation(int n) {
   if (n % 2 != 0)
      cout<<-1;
   else
      for (int i = 1; i <= n / 2; i++)
         cout<<(2*i)<<"\t"<<((2*i) - 1)<<"\t";
}
int main() {
   int n = 4;
   cout<<"Good Permutation of first N natural Numbers : \n"; printGoodPermutation(n);
   return 0;
}

Đầu ra

Good Permutation of first N natural Numbers :
2 1 4 3