小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5。小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数。使得这个数尽可能大,而且可以被90整除。
注意:
1.这个数没有前导0,
2.小K不需要使用所有的牌。
第一行给出一个n,表示n张牌。(1<=n<=1000)
第二行给出n个整数a 0 0,a 1 1,a 2 2,…,a n−1 n−1 (a i i是0或5 ) 表示牌上的数字。
4 5 0 5 0
0
虽然说是栈和队列的专项训练= =没感觉需要用到
从上午开始一直CE,最后我终于想通换了编译器QAQ
但是忘了删掉调试用的输出,WA了
还有if条件也从判断5改成先判断0
嗯,思路是能整除90,最后一位一定是0,开始是5,按照3的倍数的规律,和应该是9的倍数//n*5%9==0
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,i,a[1000];
while(scanf("%d",&n)!=EOF)
{
int m=0,s=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]==5)
m++;
}
sort(a,a+n,cmp);
//不需要使用所有的牌,5可以有不用的,M大于5*9*N就可以,必须有一个及以上个0
for(i=1;i<=m;i++)
{//printf("=%d=",m);
if(5*i%9==0)
s=i;
}
if(n>m)//有0
{
if(s>0)//9的倍数
{
for(i=0;i<s;i++)
printf("%d",a[i]);
for(i=0;i<n-m;i++)
printf("0");
}
else//非9的倍数
printf("0");
}
else//无 0 既无解
printf("-1");
printf("\n");
}
return 0;
}