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 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告