WY15 幸运的袋子

news/2025/2/12 4:37:48/

目录

问题描述

输入描述:

输出描述:

解题分析

代码实现


练习题入口 

问题描述

   一个袋子里面有n个球,每个球上面都有一个号码(拥有相同号码的球是无区别的)。如果一个袋子是幸运的当且仅当所有球的号码的和大于所有球的号码的积。
例如:如果袋子里面的球的号码是{1, 1, 2, 3},这个袋子就是幸运的,因为1 + 1 + 2 + 3 > 1 * 1 * 2 * 3
    你可以适当从袋子里移除一些球(可以移除0个,但是别移除完),要使移除后的袋子是幸运的。现在让你编程计算一下你可以获得的多少种不同的幸运的袋子。

输入描述:

第一行输入一个正整数n(n ≤ 1000) 第二行为n个数正整数xi(xi ≤ 1000)

输出描述:

输出可以产生的幸运的袋子数

 

解题分析

   题中要我们找寻 “幸运袋子数”,也就是 ‘一堆数相加’ 大于 ‘一堆数相乘’。如下图,我们能列出许多这样的式子,但是这样太麻烦了也不利于编程,所以我们一般碰到这一类的题就先把数组排序。

第一步:从小到大排序数组

 

第二步:开始从一个元素查找“幸运袋子”

    我们先定义一个 sum 和一个 multi 分别记录‘一堆数相加’ 大于 ‘一堆数相乘’。同时定义一个 count 记录幸运袋子数。

   首先从a1开始循环查找,a1自己不能组成“幸运袋子”,往后遍历到 a2,因为 a1*a2 > a1+a2,所以 count++,a1和a2达成条件,然后接着遍历到 a3,条件成立,count++。

    下一个到 a4 ,因为a1*a2*a3*a4 < a1+a2+a3+a4,条件不成立,此时a5我们就不用遍历了,肯定不成立,所以直接 break 返回到a3那一层。

a5 > a4 ,当a4不成立时,a5肯定也不成立,这个也就是排序的好处,减少编程难度

  此时回到上一层,现在要从a2到a4,所以我们要让 sum 减去 a3,multi 除去 a3  ,接着往下遍历,直到遍历到不成立的数。

要注意两种特殊情况: 

  1. a[i] == 1   1 和任何数的和都大于它和任何数的积  
  2. 拥有相同号码的球是无区别的

这些会在代码中标记处理

代码实现

import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n = in.nextInt();int[] arr = new int[n];for(int i = 0;i < n;i++){arr[i] = in.nextInt();}Arrays.sort(arr);System.out.println(Count(arr,n,0,0,1));}public static int Count(int[] a,int n,int pos,int sum,int multi){int count = 0;for(int i = pos;i<n;i++){sum += a[i];multi*=a[i];if(sum>multi){count=count+1+Count(a,n,i+1,sum,multi);}else if(a[i] == 1){//特殊情况1 当a[i]==1时可以直接向下递归count=count+Count(a,n,i+1,sum,multi);}else{break;}sum = sum - a[i];multi/=multi/a[i];//特殊情况2,当碰见相同数值,我们直接跳过while(i<n-1 && a[i]==a[i+1]){i++;}}return count;}
}

http://www.ppmy.cn/news/496765.html

相关文章

springboot项目父子工程整项目打包太大问题解决

springboot项目部署虽然简单&#xff0c;但是将一整个项目打成一个包的话就会非常大&#xff0c;每次对项目进行微调的时候就会非常痛苦&#xff0c;所以接下来就是处理这个问题的办法&#xff1a; <build><plugins><plugin><groupId>org.apache.mave…

钱袋子动画(金币飞出,袋子内动态减少,钱袋子摇晃)

简述 粗略构图&#xff0c;请发挥想象力哦&#xff0c;哈哈哈触发点击事件时金币飞出&#xff0c;钱袋子摇晃钱袋子里面的金币总量动态减少 思想 袋子内部动画就是上面波纹水平移动&#xff0c;金币总量垂直移动&#xff08;transform:translateX||translateY)钱袋子摇晃就是…

Springboot项目多模块打包jar移动到指定目录,docker打jar包构建镜像部署并运行

环境 springboot&#xff1a;2.7.1 jdk&#xff1a;12 前言 最近想着用docker来部署应用&#xff0c;这就意味着&#xff0c;打jar包时&#xff0c;需要指定打包的位置。并且在每次构建时&#xff0c;能够清除掉旧包&#xff0c;存入新包。 步骤 假设你已经有了一个准备部…

springboot模块化父子项目搭建pom 及打包

父项目 父项目 不做任何代码处理&#xff0c;只管理其他模块&#xff0c; 它的父项目继承springboot 它有自己的 用于子模块引用 它的打包方式为pom 它的<> 管理所有公共jar 版本 它的 管理所有公共jar 它的 管理所有模块 <project xmlns"http://maven.apache.…

同放在袋子里

我在外读书工作&#xff0c;有几年很忙、也很荒唐&#xff0c;竟然两三年没有回家过年。&#xff08;因为每年年初四&#xff0c;我就必须出现在湖南&#xff0c;然后行走在列车上和各个车站&#xff0c;一直到年十六十七&#xff0c;天天看着新闻联播干活&#xff0c;有一点指…

三个袋子

&#xff08;文章修改于2020年3月22日23点45分&#xff09; 第二次做这个原题时WA了两次&#xff0c;才发现是有些隐蔽的数据不能通过&#xff08;如32532525 99999&#xff09;为防止溢出&#xff0c;将所有的int型改为long long int型 时间限制: 1 Sec 内存限制: 128 MB [提交…

【转】手机怎么放可以减少辐射?

文章来源> http://health.huanqiu.com/hygiene/hint/2009-05/466422.html 随着无线通讯技术的发展&#xff0c;使用手机的人越来越多&#xff0c;而手机带来的相关健康问题也引起了人们更多的关注。手机的辐射到底对人体有多大危害&#xff0c;如何把危害的程度降到最低&a…

不要把自己装在袋子里面

这几天一直在处理疾控和卫生监督所网络的事情&#xff0c;感受如下&#xff1a; 1、不要把自己装在袋子里面。 2、不要把喜怒写在脸上。 3、低调是一种实用技巧。 4、有时候留白很重要。 呵呵&#xff0c;就这样吧。