小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5。小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数。使得这个数尽可能大,而且可以被90整除。
注意:
1.这个数没有前导0,
2.小K不需要使用所有的牌。
Input
每个测试数据输入共2行。
第一行给出一个n,表示n张牌。(1<=n<=1000)
第二行给出n个整数a0
,a1,a2,…,an−1 (ai
是0或5 ) 表示牌上的数字。
Output
共一行,表示由所给牌组成的可以被90整除的最大的数,如果没有答案则输出”-1”(没有引号)
Sample Input
4 5 0 5 0
Sample Output
0
题解:
90 = 9 * 10。10好说,只要结果的数的末尾有零就肯定能被10整除。关键是九,能被九整除的数的各个位上的数之和也能被九整除。
代码:
#include <bits/stdc++.h>
using namespace std;
int numF,numZ;\5的个数,0的个数。
int main(){
int N;
while(scanf("%d",&N) == 1){
numF = numZ = 0;
for(int i=0 ; i<N ; ++i){
int t;
scanf("%d",&t);
if(t == 5)++numF;
else ++numZ;
}
int F = numF/9;
if(numZ == 0)printf("-1
");
else if(F == 0)printf("0
");
else {
for(int i=1 ; i<=F*9 ; ++i)printf("5");
for(int i=1 ; i<=numZ ; ++i)printf("0");
printf("
");
}
}
return 0;
}