题目
小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5。小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数。使得这个数尽可能大,而且可以被90整除。
注意:
1.这个数没有前导0,
2.小K不需要使用所有的牌。
收起
输入
每个测试数据输入共2行。 第一行给出一个n,表示n张牌。(1<=n<=1000) 第二行给出n个整数a[0],a[1],a[2],…,a[n-1] (a[i]是0或5 ) 表示牌上的数字。
输出
共一行,表示由所给牌组成的可以被90整除的最大的数,如果没有答案则输出”-1”(没有引号)
输入样例
4 5 0 5 0
输出样例
0
思路:
首先,需要知道一个小知识点就是,被9整除,各个位上的数之和相加一定是9的倍数。
另外,注意集中情况,被90整除,个位上一定为0,如果输入的数据没有0,结果一定是-1,第二种情况就是如果有0但是5的和不是9的倍数,那么结果就是0,5的个数最少并且值最大还能被9整除,一定是555555555,这时候我们就需要判断有几组这个数据就好了。
Java:
import java.math.BigInteger;
import java.util.*;
public class testOne {
public static void main(String[] args) throws Exception{
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int[] num=new int[n];
int zero=0,five=0;
String div="";
for(int i=0;i<n;i++) {
num[i]=input.nextInt();
if(num[i]==0) {
zero++;
}else {
five++;
}
}
if(zero==0) {
System.out.println("-1");
}else if(zero>0&&five<9){
System.out.println("0");
}else {
for(int i=0;i<five/9;i++) {
div+="555555555";
}
for(int i=0;i<zero;i++) {
div+="0";
}
}
System.out.println(div);
}
}
探讨了如何通过算法从给定的数字卡片中构造出能被90整除的最大数值,重点在于满足数的个位为0且各位数字之和为9的倍数。

1102

被折叠的 条评论
为什么被折叠?



