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