牛客网 幸运的袋子

简介: 牛客网 幸运的袋子

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


相关文章
|
19天前
|
XML Java 数据库连接
三大框架题目整合考试题(含详解)
三大框架题目整合考试题(含详解)
10 0
|
12月前
|
前端开发
牛客网DAY2(编程题)
牛客网DAY2(编程题)
43 0
|
缓存 数据安全/隐私保护 C++
两道挺有意思的 CTF 题
两道挺有意思的 CTF 题
|
编译器 测试技术 C++
听说三数之和是你梦碎的地方?Leetcode每日刷题(day1)(上)
听说三数之和是你梦碎的地方?Leetcode每日刷题(day1)
听说三数之和是你梦碎的地方?Leetcode每日刷题(day1)(上)
|
前端开发 JavaScript
#yyds干货盘点# 前端歌谣的刷题之路-第九十五题-判断质数
#yyds干货盘点# 前端歌谣的刷题之路-第九十五题-判断质数
69 0
#yyds干货盘点# 前端歌谣的刷题之路-第九十五题-判断质数
|
前端开发 JavaScript
#yyds干货盘点# 前端歌谣的刷题之路-第九十六题-判断质数
#yyds干货盘点# 前端歌谣的刷题之路-第九十六题-判断质数
68 0
#yyds干货盘点# 前端歌谣的刷题之路-第九十六题-判断质数
|
双11 C语言
【牛客刷题】/*开胃菜——简单四道编程题*/
【牛客刷题】/*开胃菜——简单四道编程题*/
167 0
|
前端开发
#yyds干货盘点# 前端歌谣的刷题之路-第三十四题-且运算
#yyds干货盘点# 前端歌谣的刷题之路-第三十四题-且运算
44 0
#yyds干货盘点# 前端歌谣的刷题之路-第三十四题-且运算