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
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP