考研-01-求30的倍数
作者:
blossomsym
,
2023-07-18 18:39:47
,
所有人可见
,
阅读 445
给定一个整数 n,你可以将其中的数字以任意顺序重新排列,组成新的数字(也可以不重排,保留原数字)。请问能否组合出30的倍数,如果可以,则输出满足条件的最大值,否则输出 −1。例如,对于 210,你可以通过重排得到 201,210,012,021,102,120,其中 120,210都是30的倍数,由于要找最大的,所以答案是 210
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
if(n<=0) {
cout<<-1<<endl;
return 0;
}
int tmp=n,sum=0;
vector<int> vec;
while(tmp){
vec.push_back(tmp%10);
sum+=tmp%10;
tmp/=10;
}
sort(vec.begin(),vec.end());
if(vec[0]!=0||sum%3!=0){
cout<<-1<<endl;
} else{
for(int i=vec.size()-1;i>=0;i--){
cout<<vec[i];
}cout<<endl;
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=20;
int di[N];
int main(){
int n;cin>>n;
int tmp=n,cnt=0,ans=-1;
while(tmp){
di[cnt++]=tmp%10;
tmp/=10;
}
sort(di,di+cnt);
do{
int t=0;
for(int i=0;i<cnt;i++) t=t*10+di[i];
if(t%30==0&&t>ans){
ans=t;
}
} while(next_permutation(di,di+cnt));
cout<<ans<<endl;
return 0;
}