幸运的袋子
题目描述:一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。
输入描述:第一行输入一个正整数n(n ≤ 1000) 第二行为n个数正整数xi(xi ≤ 1000)
输出描述:输出可以产生的幸运的袋子数
示例:
输入:
3
1 1 1
输入:2
链接:幸运的袋子
思路
1.将球的号码进行排序。
2.当一个号码和前面的号码无法组成幸运的袋子直接break,因为后边的号码肯定比前面的号码大或者相等,无法构成幸运的袋子。
3.当返回上层递归后,进行回溯,继续判断前面号码和当前位置后面的号码是否可以构成幸运的袋子。
特殊情况当a[i]=1时也需要继续判断,因为任何数与1的和总比任何数与1的积大。
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++) {
arr[i]=s.nextInt();
}