51Nod - 1433 0和5

小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\n");
		else if(F == 0)printf("0\n");
		else {
			for(int i=1 ; i<=F*9 ; ++i)printf("5");
			for(int i=1 ; i<=numZ ; ++i)printf("0");
			printf("\n");
		}
	}
	
	return 0;
}

 

posted @ 2018-07-20 11:30  Assassin_poi君  阅读(107)  评论(0编辑  收藏  举报