题目链接:
https://www.nowcoder.com/practice/a5190a7c3ec045ce9273beebdfe029ee?tpId=85&&tqId=29839&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++){
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
System.out.println(count(arr, n, 0, 0, 1));
//0 , 0 , 1表示开始遍历的地方, sum = 0, mul = 1
}
public static int count(int[] arr, int n, int start, int sum, int mul){
int count = 0;
for(int i = start; i < n; i++){
sum += arr[i];
mul *= arr[i];
if(sum > mul){
//此处的 1 表示sum > mul这一次的计数
count += 1 + count(arr, n, i + 1, sum, mul);
}else if(arr[i] == 1){
count += count(arr, n, i + 1, sum, mul);
}else{
break;
}
sum -= arr[i];
mul /= arr[i];
while(i < n - 1 && arr[i] == arr[i + 1]){
i++;
}
}
return count;
}
}