#include<bits/stdc++.h>
using namespace std;
const int maxn = 10;
string s;
int sum;
int num[maxn] = {0};
int len;
string check[7] = {"125", "250", "375", "500", "625", "750", "875"};

void print() {
    for (int i = 9; i >= 1; i--) {
        for (int j = 1; j <= num[i]; j++)
            cout << i;
    }//输出0以外的数字,倒序输出,保证0不会打头
}

void prints()
{
    for(int i = 1;i<=num[0];i++)cout << 0;//输出所有0,放在print后
}

void reset(int s,int re)
{
    for(int i = 0;i<=re;i++)
    {
        num[check[s][i] - '0']++;
    }
    return;//重置被删除数字状态,re是已被更改的位置
}

void solve() {
    for (int i = 0; i < len; i++) {
        int a = s[i] - '0';
        sum += a;
        num[a]++;
    }
    if (sum % 3 != 0) {
        cout << -1;
        return;
    } 
    else 
    {
        if (!num[5])
        {
            if (num[0] < 3 && num[0] != len)//对000特判
            {
                cout << -1;
                return;
            } 
            else 
            {
                print();prints();//先输出0以外的数
                return;//输出后跳出,避免重复输出
            }
        } 
        else 
        {
            for (int i = 0; i < 7; i++)
            {
                string goal = check[i];
                bool update = 1;//检验是否有不符合的数字
                for (int j = 0; j < 3; j++)
                {
                    int number = goal[j] - '0';
                    num[number]--;
                    if (num[number] < 0)
                    {
                        update = 0;
                        reset(i,j);//j是被改变数字在字符串的最后位置
                        break;
                    } 
                }
                if (update)
                {
                    print();
                    cout << goal;//先输出目标字符串,避免诸如3750,可能输出0375的问题
                    prints();
                    break;
                }
            }
            return;
        }
    }
}

int main() {
    cin >> s;//用字符串,方便处理
    len = s.length();
    solve();
}

(゚∀゚)牛客小凳又来写题解了,今天的题霸难度稳定,又是模拟,当然涉及一点点的数学。

首先,一个数如果要整除于375,那么一定会整除于3和125,因为3*125 = 375,整除于3很好检验,小学三年级我们就学过,一个数字所有位数的和如果可以被3整除,那么其一定可以被3整除

int a = s[i] - '0';
sum += a;

if (sum % 3 != 0) {
	cout << -1;
	return;
}
else {
	...
}

这里我们用sum表示所有位数的和,对第一行不熟悉的可以去复习一下ASCII编码(´・ω・`),然后检验是否整除3,不是直接输出-1,否则跳转到对于是否整除125的判断

那么如何判断是否整除125呢?我们不妨看看整除125的数有哪些

125,250,375,500,625,750,875,1000,1125,1250,...

我们很容易发现,每过8次,数字的后三位都会循环一次,所以我们知道了,如果要整除125,那么后三位一定满足

string check[7] = {"125", "250", "375", "500", "625", "750", "875"};

这里我对000结尾进行了特判,所以删去了000

然后对7个目标字符串进行搜索,检验可用性,如果都不可以,说明无法整除125,输出-1,否则输出结果

小凳实力浅薄,各路大佬轻喷(,,・ω・,,),有问题欢迎在评论区留言