Codeforces Round #131 (Div. 2) : B

首先能被2,5整除的数结尾必须是0;

如果没有0肯定不行;

然后判断他们的和ans%3:

如果==0,直接从大到小输出就行;

如果==1,要么删除它们之间最小的那个%3==1的,要么删除两个小的并且%3==2的;

如果==2,要么删除它们之中最小的那个%2==2的,要么删除两个小的并且%3==1的;

代码:

 1 #include<iostream>
 2 using namespace std;
 3 int n,d[10],a,u;
 4 main()
 5 {
 6     cin>>n;
 7     while(n--)cin>>a,++d[a],u+=a;
 8     if(u%3)
 9     {
10         for(int i=1; i<10; ++i)
11             if(i%3==u%3 && d[i])
12                 --d[i],u-=i,i=10;
13         for(n=0; n<2; ++n)
14             for(int i=1; i<10; ++i)
15                 if(u%3&&i%3&&d[i])
16                     --d[i],u-=i,i=10;
17     }
18     if(!u)d[0]=1;
19     if(!d[0]||u%3)cout<<-1;
20     else
21         for(int i=9; i>=0; --i)
22             while(d[i]--)
23                 cout<<i;
24     return 0;
25 }
View Code
原文地址:https://www.cnblogs.com/yours1103/p/3360943.html