链接:点击打开链接
题意:小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5。小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数。使得这个数尽可能大,而且可以被90整除。注意:1.这个数没有前导0,2.小K不需要使用所有的牌。
代码:
#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main(){ //因为3的倍数的特点是个位数相加和是3的倍数
int n,i,j,num,sum_0,sum_5; //因此555是3最小的倍数,而555除3得185,个位
while(scanf("%d",&n)!=EOF){ //数和为14,因此假如是9的倍数则最小为555555555
sum_0=sum_5=0; //只有这样才能在除完3后再整除3
for(i=0;i<n;i++){
scanf("%d",&num);
if(num==5)
sum_5++;
else
sum_0++;
}
if(sum_5<9){
if(sum_0==0)
printf("-1\n");
else
printf("0\n");
}
else if(sum_0==0){ //因为是九十的倍数,因此必须是偶数,所以至少有一个零
printf("-1\n");
}
else{
while(sum_5%9!=0)
sum_5--;
for(i=0;i<sum_5;i++)
printf("5");
for(i=0;i<sum_0;i++)
printf("0");
printf("\n");
}
}
return 0;
}