HXY玩卡片
题目描述
HXY得到了一些卡片,这些卡片上标有数字 0 0 0 或 5 5 5 。现在她可以选择其中一些卡片排成一列,使得排出的一列数字组成的数最大,且满足被 90 90 90 整除这个条件。同时,这个数必须为合法的某个非负整数,即不能含有前导 0 0 0 ,即 0 0 0 不能作为这串数的首位。但是特殊地,整数 0 0 0 满足条件。如果不能排出这样的数,输出“ − 1 -1 −1”。
输入格式
第一行,卡片的个数 n n n 。
第二行,分别给出了这 n n n 个数(只能为数字 5 5 5 或 0 0 0 )。
输出格式
仅一行,如果可以排出,则输出这个数。否则输出-1
。
样例 #1
样例输入 #1
4
5 0 5 0
样例输出 #1
0
样例 #2
样例输入 #2
11
5 5 5 5 5 5 5 5 0 5 5
样例输出 #2
5555555550
样例 #3
样例输入 #3
2
5 5
样例输出 #3
-1
提示说明
数据范围:
对于 30 % 30\% 30% 的数据, n ≤ 10 n\le 10 n≤10 ;
对于 20 % 20\% 20% 的数据,仅含数字 5 5 5 ;
对于 100 % 100\% 100% 的数据, n ≤ 1000 n\le 1000 n≤1000 。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <sstream>//整型转字符串
// #include <stack>//栈
// #include <deque>//堆/优先队列
// #include <queue>//队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n;
cin>>n;
ll t=0,num=0;//t用来计0的个数,num用来记5的个数
for(ll i=1;i<=n;i++)
{
ll f;
cin>>f;
if(!f) t++;
else num++;//计下0和5的个数
}
if(!t)//没有0,即无法满足条件,输出-1
{
cout<<-1<<endl;
return 0;
}
if(num<9)//5的个数不足5个,输出0
{
cout<<0<<endl;
return 0;
}
num-=num%9;//5尽量多要,个数要是9的倍数,即可以5的个数可以去掉总个数取余9
for(ll i=1;i<=num;i++)//在前输出5
cout<<5;
for(ll i=1;i<=t;i++)//在后输出0
cout<<0;
return 0;
}