牛客网 幸运的袋子

简介: 牛客网 幸运的袋子

题目链接幸运的袋子__牛客网 (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;
    }
}


相关文章
|
1月前
2020-8-26 剑指offer编程小哥令狐 075211
2020-8-26 剑指offer编程小哥令狐 075211
22 1
|
前端开发
牛客网DAY2(编程题)
牛客网DAY2(编程题)
63 0
|
并行计算 C++
这道小学六年级的数学题,恕我直言没几个人会做
这道小学六年级的数学题,恕我直言没几个人会做
451 0
|
人工智能 算法 C++
【每日算法Day 88】超越妹妹教你如何做这道排序题
【每日算法Day 88】超越妹妹教你如何做这道排序题
|
缓存 数据安全/隐私保护 C++
两道挺有意思的 CTF 题
两道挺有意思的 CTF 题
|
前端开发 JavaScript
#yyds干货盘点# 前端歌谣的刷题之路-第二十八题-平方根
#yyds干货盘点# 前端歌谣的刷题之路-第二十八题-平方根
78 0
#yyds干货盘点# 前端歌谣的刷题之路-第二十八题-平方根
|
前端开发
#yyds干货盘点# 前端歌谣的刷题之路-第三十三题-或运算
#yyds干货盘点# 前端歌谣的刷题之路-第三十三题-或运算
43 0
#yyds干货盘点# 前端歌谣的刷题之路-第三十三题-或运算
|
前端开发
#yyds干货盘点# 前端歌谣的刷题之路-第三十四题-且运算
#yyds干货盘点# 前端歌谣的刷题之路-第三十四题-且运算
57 0
#yyds干货盘点# 前端歌谣的刷题之路-第三十四题-且运算
|
前端开发 JavaScript 数据处理
#yyds干货盘点# 前端歌谣的刷题之路-第二十四题-阶乘
#yyds干货盘点# 前端歌谣的刷题之路-第二十四题-阶乘
87 0
#yyds干货盘点# 前端歌谣的刷题之路-第二十四题-阶乘