牛客网 幸运的袋子

简介: 牛客网 幸运的袋子

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


相关文章
|
9月前
|
人工智能 算法 Java
拼多多2019春招编程题答案
拼多多2019春招编程题答案
|
10月前
|
缓存 算法 搜索推荐
百度面试算法题目
百度面试算法题目
51 0
|
缓存 数据安全/隐私保护 C++
两道挺有意思的 CTF 题
两道挺有意思的 CTF 题
|
存储 安全 小程序
软件测试面试题及答案,这些可以白嫖的题目确定不收藏?
对于软件测试培训人员来说,除了掌握好专业的理论知识和技术,最重要的面试准备也是少不了的,毕竟面试可是大家正式进入软件行业的拦路虎,所以,在正式面试前,相关的软件测试面试题真题以及答案也一定要背一背!
133 0
[#4练习赛]背答案
传智专修学院“Java程序设计”的期末考试来源于一个选择库,共有 $n$ 道题目,每道题目由问题和答案组成,都是一个字符串,保证所有题目题面互不相同。这个题库已经发给同学进行备考准备。 正式考试中,试卷包含 $q$ 道题目,每道题目都有 $4$ 个选项,你需要从 $4$ 个选项中选出与答案相符的选项。请你完成这场考试。
算法刷题第五天(跑路人笔记)<双指针>
算法刷题第五天(跑路人笔记)<双指针>
算法刷题第五天(跑路人笔记)<双指针>
【蓝桥真题1】这道用了7个for循环的蓝桥真题,让舍友哭着跑出考场【内附原题资源】(下)
【蓝桥真题1】这道用了7个for循环的蓝桥真题,让舍友哭着跑出考场【内附原题资源】
110 0
【蓝桥真题1】这道用了7个for循环的蓝桥真题,让舍友哭着跑出考场【内附原题资源】(下)
|
存储 程序员
【1024程序员节福利!!!】牛客网小练习
【1024程序员节福利!!!】牛客网小练习
【1024程序员节福利!!!】牛客网小练习
|
前端开发 算法 JavaScript
蓝桥杯web开发-5道模拟题让你信心满满
距离蓝桥杯已经不到5天了,今天总结一下做过的5道简单的web开发组模拟题来增加信心,你只管努力学习,剩下的交给天意!
551 0
蓝桥杯web开发-5道模拟题让你信心满满
|
Java 编译器 API
【蓝桥真题1】这道用了7个for循环的蓝桥真题,让舍友哭着跑出考场【内附原题资源】(上)
特意选取了蓝桥往年真题中许多能体现出蓝桥经典题型的题目——如暴力遍历、枚举、动态规划等等。其中最主要的还是枚举,枚举题目在蓝桥杯中是最热的考点且没有之一。可以说把枚举练好,就已经半只脚踏入了国赛的大门。有需要的兄弟们可以收藏一下,后续我会继续更新蓝桥真题题型专栏,和大家一起冲击蓝桥杯。下面的真题建议大家先自行思考后再看答案。原题视频资源在文章结尾。
114 0