题目来源: CodeForces
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题
小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5。小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数。使得这个数尽可能大,而且可以被90整除。
注意:
1.这个数没有前导0,
2.小K不需要使用所有的牌。
Input
每个测试数据输入共2行。
第一行给出一个n,表示n张牌。(1<=n<=1000)
第二行给出n个整数a[0],a[1],a[2],…,a[n-1] (a[i]是0或5 ) 表示牌上的数字。
Output
共一行,表示由所给牌组成的可以被90整除的最大的数,如果没有答案则输出”-1”(没有引号)
Input示例
4
5 0 5 0
Output示例
0
找规律。。
能被90整除的数的位数中不为零的数一定是9的倍数, 比如5555555550, 当然555555555肯定不行。
#include <iostream>
#include <queue>
using namespace std;
int main(){
int n, x, a, b;
cin >> n;
a = b = 0;
for(int i = 0; i < n; i++){
cin >> x;
if(x == 5) a++;
else b++;
}
if(!b) cout << "-1" << endl; // 没有0一定不能被90整除
else{
for(int i = 0; i < a/9; i++) cout << "555555555"; // 判断有几组9个5
if(a/9){
for(int i = 0; i < b; i++) cout << "0"; // 输出剩下的0
cout << endl;
}
else cout << "0" << endl; //没有输出过5, 直接输出0
}
return 0;
}