>  기사  >  백엔드 개발  >  C++에서 처음 N개의 숫자가 K만큼 떨어져 있도록 재정렬합니다.

C++에서 처음 N개의 숫자가 K만큼 떨어져 있도록 재정렬합니다.

王林
王林앞으로
2023-09-11 15:13:10989검색

在 C++ 中重新排列前 N 个数字,使它们处于 K 距离

정수 변수가 주어지면 N과 K를 가정해 보세요. 작업은 먼저 N의 순열을 계산한 다음 각 요소로부터 거리 K만큼 떨어져 있도록 순열을 재배열하는 것입니다.

다양한 입력 및 출력 시나리오를 살펴보겠습니다. -

Input- int n = 20, int k = 2

Output

Strong>− 첫 번째 N 숫자를 K 거리에 있도록 재배열: 3 4 1 2 7 8 5 6 11 12 9 10 15 16 13 14 19 20 17 18.

Explanation

Explanation strong>− 정수 변수 '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"만큼 떨어져 있도록 배열됩니다.

Input− int n = 10, int k = 3

Input − int n = 10, int k = 3

Input p>

Output- 첫 번째 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) 함수를 호출합니다.

  • Rearrangement(int n, int k)

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

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

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

    • IF temp가 0이 아닌지 확인한 다음 NOT POSSIBLE을 인쇄합니다.

    • i가

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

    • i가 N보다 작을 때까지 i에서 1까지 FOR 루프를 시작하고 i를 1씩 증가시킵니다.

    • prt[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;
    }

    Output

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

    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

    위 내용은 C++에서 처음 N개의 숫자가 K만큼 떨어져 있도록 재정렬합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제