Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

처음 N개의 자연수의 좋은 순열 찾기 C++

<시간/>

이 문제에서 우리는 정수 값 N입니다. 우리의 임무는 처음 N개의 자연수의 좋은 순열을 찾는 것입니다. .

순열은 배열의 순서와 관련하여 개체 집합의 전체 또는 일부를 배열하는 것입니다.

좋은 순열 $1\leqslant{i}\leqslant{N}$ 다음에 오는 순열입니다.

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

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

문제를 이해하기 위해 예를 들어 보겠습니다.

Input : N = 1
Output : -1

솔루션 접근 방식

문제에 대한 간단한 해결책은 순열을 찾는 것입니다. p와 같은 pi =나.

그런 다음 방정식을 재고하여 pi !=나. 따라서 $2x \leqslant x$와 같은 값 x에 대해 p 2x - 1 이 있습니다. 및 p 2k . 이제 n에 대한 순열 방정식을 만족하는 방정식이 있습니다. 다음은 방정식의 해입니다.


예시

솔루션 작동을 설명하는 프로그램

#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;
}

출력

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