牛客网 幸运的袋子

简介: 牛客网 幸运的袋子

题目链接幸运的袋子__牛客网 (nowcoder.com)

幸运袋子条件:球球的和 > 球球的积

题目:给定一定数量的球球,让你判断能组成多少种幸运的袋子

方法:循环+递归

思路假设


e4fa8de6d24a447e9c5ebe56cfc88efb.png

c48ed739a824475ab02894283f99525c.png


25266fd53eb443f792624d7a819950a8.png


通过这样递归+回溯的方法 ,不断进行到最后,我们可以得到,成立的结果有  

1  1,1  1  3,1  1  5,1  1  7,1  3,1  5,1  7。共计七种。

代码实现


import java.util.*;
public class Main{
    //main方法里的内容还是简单的输入输出
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = new int[n];
        for(int i=0;i<n;i++){
            arr[i]=scanner.nextInt();
        }
        Arrays.sort(arr);
        int ret = work(arr,0,arr[0],arr[0]);//开始是从 arr[0]开始的
        System.out.println(ret);
    }
    // arr存放球球的值,len是arr的大小,pos 是当前位置,sum 当前位置的和,multi当前位置的积
    public static int work(int[] arr,int pos,int sum,int multi){
        int ret = 0;//用来记录幸运袋子的个数,也是最后的返回值
        for(int i=pos+1;i<arr.length;i++){
            sum = sum + arr[i];
            multi = multi * arr[i];
            if(sum>multi){
                //成立,继续向下进行递归
                ret = ret + 1 + work(arr,i,sum,multi);
            }else {
                //不成立,直接break
                break;
            }
            //这里进行回溯,因此要还原 sum 和 multi
            sum = sum - arr[i];
            multi = multi / arr[i];
            //还原之后 继续正常向后走
            //由于题中说 球球并无差别,因此要把相同号码的情况给排除
            while(i+1<arr.length && arr[i]==arr[i+1]){
                i++;
            }
        }
        //循环结束 也就走了(遍历)了一遍,直接返回最后的值
        return ret;
    }
}


相关文章
|
机器学习/深度学习 人工智能 C++
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
190 0
【c++百日刷题计划】 ———— DAY16,刷题百天,养成刷题好习惯
|
机器学习/深度学习 人工智能 C++
【c++百日刷题计划】 ———— DAY15,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY15,刷题百天,养成刷题好习惯
181 1
|
机器学习/深度学习 人工智能 移动开发
【c++百日刷题计划】 ———— DAY18,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY18,刷题百天,养成刷题好习惯
146 0
|
机器学习/深度学习 人工智能 BI
【c++百日刷题计划】 ———— DAY21,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY21,刷题百天,养成刷题好习惯
134 0
|
算法 C++
【c++百日刷题计划】 ———— DAY19,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY19,刷题百天,养成刷题好习惯
108 0
|
自然语言处理 C++
【c++百日刷题计划】 ———— DAY17,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY17,刷题百天,养成刷题好习惯
162 0
|
移动开发 BI C++
【c++百日刷题计划】 ———— DAY20,刷题百天,养成刷题好习惯
【c++百日刷题计划】 ———— DAY20,刷题百天,养成刷题好习惯
164 0
|
算法 JavaScript 容器
牛客网《剑指offer》专栏刷题练习之数组专精
牛客网《剑指offer》专栏刷题练习之数组专精
96 0
|
前端开发
牛客网DAY2(编程题)
牛客网DAY2(编程题)
67 0
|
C语言
牛客网练习题刷
牛客网练习题刷
117 0
牛客网练习题刷

热门文章

最新文章

相关实验场景

更多