C++中可被自身整除的數字的重新排列


給定一個整數型別的數字,例如number。任務是重新排列number的數字,使得重新排列後形成的數字也能被給定的數字number整除。

讓我們看看各種輸入輸出場景:

輸入 - int number = 100035

輸出 - 可被自身整除的數字的重新排列是:300105

解釋 - 給定一個整數number,即100035。現在,任務是重新排列這些數字,使得形成的數字可以被100035整除。因此,重新排列數字後得到300105,它可以被100035整除。

輸入 - int number = 1000035

輸出 - 可被自身整除的數字的重新排列是:3000105

解釋 - 給定一個整數number,即1000035。現在,任務是重新排列這些數字,使得形成的數字可以被1000035整除。因此,重新排列數字後得到3000105,它可以被1000035整除。

輸入 - int number = 28

輸出 - 可被自身整除的數字的重新排列是:-1

解釋 - 給定一個整數number,即28。現在,任務是重新排列這些數字,使得形成的數字可以被28整除。重新排列數字後得到82,它不能被28整除,因此輸出為-1。

下面程式中使用的演算法如下:

  • 輸入一個整數型別的變數,例如number,並將資料傳遞給函式Rearrangement(number)。

  • 在函式Rearrangement(number)內部:

    • 建立一個儲存整數型別的vector變數,例如vec(10, 0)。

    • 呼叫函式total_count(number, vec),並將number和vec作為引數傳遞給函式。

    • 從i=2開始迴圈,直到i小於10。在迴圈內部,將temp設定為number * i。

    • 建立一個儲存整數型別的vector變數,例如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<int> &vec_3)內部:

    • 當number不為0時迴圈。在迴圈內部,設定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

更新於:2021年11月2日

295 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告