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

처음 N개의 숫자를 재정렬하여 C++에서 K 거리에 있도록 만듭니다.

<시간/>

N과 K라는 정수 변수가 주어집니다. 작업은 먼저 N의 순열을 계산한 다음 모든 요소에서 K 거리가 되는 방식으로 순열을 재정렬하는 것입니다.

여기에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다 -

입력 - 정수 n =20, 정수 k =2

출력 − 처음 N개의 숫자를 K 거리로 재배열하면 다음과 같습니다. 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18.

설명 - 정수 변수 'N' 즉 20 및 'K' 즉 2가 주어집니다. 이제 'N' 즉 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11의 순열을 계산합니다. , 12, 13, 14, 15, 16, 17, 18. 19, 20. 이제 모든 요소가 모든 요소에서 'k' 거리에 있도록 요소를 정렬합니다.

입력 - 정수 n =10, 정수 k =3

출력 − 처음 N개의 숫자를 K 거리로 재배열하는 것은 불가능합니다.

설명 - 정수 변수 'N' 즉 10 및 'K' 즉 3이 주어집니다. 이제 'N' 즉 1, 2, 3, 4, 5, 6, 7, 8, 9, 10의 순열을 계산합니다. 이제 , 모든 요소가 모든 요소에서 'k' 거리에 있지만 주어진 입력 값으로는 불가능하도록 요소를 정렬합니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 정수형 요소(예:'N', 'K')를 입력합니다.

  • N과 K를 매개변수로 함수에 전달하여 Rearrangement(int n, int k) 함수를 호출합니다.

  • 함수 내부에서 재배열(int n, int k)

    • 정수 변수를 temp로 선언하고 n % (2 * k)로 설정합니다.

    • 정수형 배열을 n + 1 크기의 ptr, 즉 prt[n+1]로 선언합니다.

    • IF k =0을 확인한 다음 i에서 1까지 루프 FOR를 시작하여 i가 크기보다 작아질 때까지 i를 1씩 증가시키고 i를 인쇄합니다.

    • 온도가 0이 아닌지 확인한 다음 NOT POSSIBLE을 인쇄하십시오.

    • i에서 N보다 작아질 때까지 FOR 루프를 시작하고 i로 ptr[i]를 설정합니다.

    • i에서 1까지 루프 FOR를 시작하여 i가 n보다 작을 때까지 i + 2 * k로 i를 설정합니다. 루프 내에서 j가 k보다 작을 때까지 j에서 1까지 다른 루프 FOR를 시작하고 j를 1만큼 증가시킵니다. 루프 내에서 ptr[i + j -1] 및 ptr[k + i + j를 전달하여 swa 메서드를 호출합니다. - 1] 매개변수로.

    • i에서 1까지 루프 FOR 시작 tll i는 N보다 작고 i를 1만큼 증가시킵니다.

    • 인쇄[i].

  • 결과를 인쇄하십시오.

예시

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

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다.

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