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