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

C++에서 그것으로도 나눌 수 있는 숫자의 재배열

<시간/>

정수 유형의 숫자가 주어집니다. 예를 들어 숫자입니다. 과제는 재배열 후에 형성된 숫자가 주어진 숫자, 즉 '숫자'로 나눌 수 있는 방식으로 숫자 자릿수를 재배열하는 것입니다.

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

입력 - 정수 =100035

출력 − 그것으로도 나누어지는 숫자의 재배열:300105

설명 - 우리는 '숫자', 즉 100035와 같은 정수가 주어집니다. 이제 작업은 형성된 숫자가 100035로 나누어 떨어지는 방식으로 이러한 주어진 숫자를 재배열하는 것입니다. 따라서 숫자를 재배열한 후 300105를 얻었으며 이 값은 100035로 나눌 수 있습니다.

입력 - 정수 =1000035

출력 − 그것으로도 나누어지는 수의 재배열:3000105

설명 - 우리는 '숫자', 즉 1000035와 같은 정수가 주어집니다. 이제 작업은 형성된 숫자가 1000035로 나누어 떨어지는 방식으로 이러한 주어진 숫자를 재배열하는 것입니다. 따라서 숫자를 재배열한 후 나눌 수 있는 3000105를 얻었습니다 1000035번으로.

입력 - 정수 =28

출력 − 그것으로도 나누어지는 수의 재배열:-1

설명 - 우리는 '숫자', 즉 28이라는 정수가 주어집니다. 이제 작업은 형성된 숫자가 28로 나누어 떨어지는 방식으로 이러한 주어진 숫자를 재배열하는 것입니다. 숫자 28로 나눌 수 있으므로 출력은 -1입니다.

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

  • 정수형 변수를 입력하고, 예를 들어 숫자를 입력하고 데이터를 재배열(숫자) 함수에 전달합니다.

  • 함수 내부 재정렬(숫자)

    • 정수형 변수를 저장하는 벡터형 변수를 생성합니다(예:vec(10, 0)).

    • total_count(number, vec) 함수를 호출하고 number와 vec를 함수의 매개변수로 전달합니다.

    • i에서 2까지 FOR 루프를 시작하여 i가 10보다 작을 때까지 반복합니다. 루프 내부에서 temp를 number * i로 설정합니다.

    • 정수형 변수를 저장하는 벡터형 변수를 생성합니다. 예를 들어 vec_2(10, 0)입니다.

    • total_count(number, vec_2) 함수를 호출하고 number와 vec_2를 함수의 매개변수로 전달합니다.

    • IF equal(vec.begin(), vec.end(), vec_2.begin())을 확인한 다음 temp를 반환합니다. 그렇지 않으면 -1을 반환합니다.

  • total_count(int number, vector &vec_3)

    함수 내부
    • 루프 시작 WHILE 번호는 1입니다. 루프 내에서 vec_3을 vec_3[number % 10]++로 설정하고 number를 number / 10으로 설정합니다.

예시

#include<bits/stdc++.h>
using namespace std;
void total_count(int number, vector<int> &vec_3){
   while(number){
      vec_3[number % 10]++;
      number = number / 10;
   }
}
int Rearrangement(int number){
   vector<int> vec(10, 0);
   total_count(number, vec);
   for(int i = 2; i < 10; i++){
      int temp = number * i;
      vector<int> vec_2(10, 0);
      total_count(temp, vec_2);
      if(equal(vec.begin(), vec.end(), vec_2.begin())){
         return temp;
      }
   }
   return -1;
}
int main(){
   int number = 100035;
   cout<<"Rearrangement of a number which is also divisible by it is: "<<Rearrangement(number);
   return 0;
}

출력

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

Rearrangement of a number which is also divisible by it is: 300105