文章
119
粉丝
68
获赞
92
访问
20.1k
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
// 统计每个数字的出现次数
int count[10] = {0};
for (char c : s) {
count[c - '0']++;
}
// 检查是否包含 0
if (count[0] == 0) {
cout << -1 << endl;
return 0;
}
// 计算所有数字之和
int sum = 0;
for (char c : s) {
sum += (c - '0');
}
// 检查是否能被 3 整除
if (sum % 3 != 0) {
cout << -1 << endl;
return 0;
}
// 构造最大数
string result;
for (int i = 9; i >= 0; i--) {
while (count[i] > 0) {
result += ('0' + i);
count[i]--;
}
}
cout << result << endl;
return 0;
}
首先,30的倍数,除以30一定是整数,那么除以30的质因数分解也必然是整数,30=2*3*5;如果除2无余则必然偶数,如果除5无余则必然是0或者5,那么,基于这两条,最后一位必然是0,对于3的倍数一定全求和除3无余,我们首先根据这三样进行判断目前的数值存量是否是满足的,假如都满足了,那么这个不就是我们要的结果吗,当然,首先我们需要对这个全数位进行判断,找是否存在0,全位和是否是3的倍数,在基于这样的数学结构一定成立的基础...
登录后发布评论
不推荐全排列函数,万一位数很长,这个n!复杂度的函数,是真干不了啥事