袋子中球号码之和大于号码之积
2017-08-21 本文已影响0人
Green_Apple
package second;
import java.util.Scanner;
/*
- 一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。
- 如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,
因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的
袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。
输入描述:
第一行输入一个正整数n(n ≤ 1000)
第二行为n个数正整数xi(xi ≤ 1000)
输出描述:
输出可以产生的幸运的袋子数
输入例子1:
3
1 1 1
输出例子1:
2
-
*/
public class FaceThirteen {public static int getResult(int[] value,int index,long sum,long multi){
if(value.length==1&&value[0]==1) return 0;
int count=0;
int length=value.length;
for(int i=index;i<length;i++){
sum+=value[i];
multi*=value[i];
if(sum>multi) count+=1+getResult(value,i+1,sum,multi);
else if(value[i]==1) count+=getResult(value, i+1, sum, multi);
else break;
sum-=value[i];
multi/=value[i];
for(;i<length-1&&value[i]==value[i+1];i++);
}
return count;}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int[] value=new int[n];
for(int i=0;i<n;i++)
value[i]=input.nextInt();System.out.println(getResult(value, 0, 0, 1)); input.close();
}
}