题目描述
给定一个整数 n,你可以将其中的数字以任意顺序重新排列,组成新的数字(也可以不重排,保留原数字)。
请问能否组合出 30 的倍数,如果可以,则输出满足条件的最大值,否则输出 −1。
例如,对于 210,你可以通过重排得到 201,210,012,021,102,120,其中 120,210 都是 30 的倍数,由于要找最大的,所以答案是 210。
输入格式
一个整数 n。
输出格式
输出能够通过重排得到的最大符合条件的数。
如果不存在,则输出 −1。
数据范围
1≤n≤10^9
输入样例:
201
输出样例:
210
My Answer Code:
/*
Author:Albert Tesla Wizard
Time:2021/8/29 01:54:25
*/
#include<bits/stdc++.h>
using namespace std;
void solve(int n)
{
string s=to_string(n);
int len=s.length();
vector<int>a;
bool ans1=false,ans2=false;
int sum=0;
for(int i=0;i<len;i++)
{
if(s[i]=='0')ans2=true;
a.push_back(s[i]-'0');
sum+=s[i]-'0';
}
if(sum%3==0)ans1=true;
if(ans1&&ans2)
{
sort(a.begin(),a.end(),greater<int>());
for(int i=0;i<len;i++)cout<<a[i];
cout<<'\n';
}
else cout<<-1<<'\n';
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin>>n;
solve(n);
return 0;
}