65,019
社区成员
发帖
与我相关
我的任务
分享
一天早上,完全是偶然的机会,米尔科在街道中央发现了一个正整数N。因为米尔科很喜欢30这个数字,他想知道他在街上找到的这个数字,通过重新排列可以得到30的最大倍数。帮助米尔科并编写一个程序来计算这个数字(如果它存在的话)。
## 输入格式
输入的第一行也是唯一一行包含整数N,最多包含100000个数字。
## 输出格式
输出的第一行(也是唯一一行)必须包含任务所需的数字(如果存在)。如果不存在,则输出-1。
#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main(){
int N;
cin>>N;
int num=N;
vector<int> vec;
while(num>0){
int n=num%10;
vec.push_back(n);
num/=10;
}
vector<int>::iterator it;
bool flag=false;
int sum=0;
for(it=vec.begin();it<vec.end();it++){
if(*it==0){
flag=true;
}
sum+=*it;
}
if(!flag){
cout<<"no result"<<endl;
return 0;
}
if(sum%3!=0){
cout<<"no result"<<endl;
return 0;
}
int arr[vec.size()];
string str=to_string(N);
int index=str.find('0',0);
string prestr=str.substr(0,index-0);
string laststr=str.substr(index+1,5-index);
prestr+=laststr;
prestr+="0";
cout<<prestr<<endl;
return 0;
}
这个题目很简单,建议多思考思考,如果看了下面还不会建议转专业。
1.我们可以把N的每一位数进行分割。
2.把被30整除,当做被3整除和被10整除的交集。被10整除要求数字以0结尾(因为数字必须要大于等于30),这个时候我们把一个0放到尾端,如果没有0,直接返回-1,;再去看剩下的所有数字之和是否可以被3整除(可以一开始就直接判断N%3==0),如果不能被3整除,直接返回-1;当然如果N<30,我们可以直接返回-1.
3.这个时候我们把一个0放到尾端,剩下的数字按照从大到小依次放入高位即可。
4.请你自己编写代码。
这些学生作业不好好做,到处问