Processing math: 100%

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。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

示例

Open Compiler
#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 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告