给定一个整数数组,我们希望去掉其中一个数,使得剩下所有数的乘积最大,问应该去掉哪一个数
输入
第一行M,表示有M组数据
接下来2*M行,每两行表示一组测试数据,每组的第一行市一个整数N,表示是数组的长度,接下来一行有N个整数,表示数组的内容,3<=N<=100,且数组内每个数都在[-10000000,10000000]区间内.
输出
M行,每行一个整数,表示应该去掉的那个数,如果有多个选择,则输出最先输入的那个.
样例输入
样例输入
4 3 0 1 2 5 2 3 5 4 8 5 -1 -2 -3 -4 -5 4 -1 -2 -3 -4
样例输出
0 2 -1 -4
枚举就完事了,注意要使用大数。
不知道数据范围的,把第一种情况作为初值!!!吃血亏了!!
另外引用分类讨论的做法: 看这
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String []args) { Scanner cin=new Scanner(System.in); int m=cin.nextInt(); BigInteger arr[]=new BigInteger [105]; while(m--!=0) { long n=cin.nextInt(); BigInteger out=BigInteger.ZERO; BigInteger multi=BigInteger.ONE,curr=BigInteger.ONE; for(int i=0;i<n;i++) arr[i]=cin.nextBigInteger(); for(int j=1;j<n;j++) { curr=curr.multiply(arr[j]); } out=arr[0]; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(j==i) continue; else multi=multi.multiply(arr[j]); } if(multi.compareTo(curr)>0) { out=arr[i]; curr=multi; } multi=BigInteger.ONE; } System.out.println(out.toString()); } } }
看了大佬的解析思路和代码,茅塞顿开,果断关注一波