华为od-C卷200分题目 - 1分月饼

华为od-C卷200分题目 - 1分月饼

题目描述

中秋节,公司分月饼,m个员工,买了n个月饼,m<=n,每个员工至少分1个月饼,但可以分多个,
单人分到最多月饼的个数是Max1,单人分到第二多月饼个数是Max2,Max1-Max2<=3,单人分到
第n-1多月饼个数是Max(n-1),单人分到第n多月饼个数是Max(n),Max(n-1)-Max(n)<=3问有
多少种分月饼的方法?

输入描述
每一行输入m n,表示m个员工,n个月饼,m<=n

输出描述
输出有多少种月饼分法

示例1
输入:
2 4

输出:
2

说明:
分法有2种
4=1+3
4=2+2
注意:1+3和3+1算一种分法
示例2
输入:
3 5

输出:
2

说明:
5=1+1+3
5=1+2+2
示例3
输入:
3 12

输出:
6

说明:
满足要求的有6种分法:
12=1+1+10(Max1=10,Max2=1,不满足要求)
12=1+2+9(Max1=9,Max2=2,不满足要求)
12=1+3+8(Max1=8,Max2=3 不满足要求)
12=1+4+7(Max1=7,Max2=4,Max3=1, 满足要求)
12=1+5+6(Max1=6,Max2=5,Max3=1,不满足要求)
12=2+2+8(Max1=8,Max2=2,不满足要求)
12=2+3+7(Max1=7,Max2=3,不满足要求)
12=2+4+6(Max1=6,Max2=4,Max3=2,满足要求)
12=2+5+5(Max1=5,Max2=2,满足要求)
12=3+3+6(Max1=6,Max2=3,满足要求)
12=3+4+5(Max1=5,Max2=4,Max3=3,满足要求)
12=4+4+4(Max1=4,满足要求)

题解

    import java.util.LinkedList;
    import java.util.Scanner;
    
    public class Main {
        static LinkedList<Integer> list;
        static int res;
        static int n, m, base;
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            n = sc.nextInt();
            m = sc.nextInt();
            if(n == 1 ) {
                System.out.println(1);
                return;
            }
            base = 1;  
            int least = 3 * n * (n - 1) / 2;  
            while (base * n + least < m) {
                base++;
            }
    
            list = new LinkedList<>();
            res = 0;
            distribution(0, m);
            System.out.println(res);
        }
    
        public static void distribution(int index, int sum) {
            if (index == n - 1) {
                // 前一个树和最后一个数的差值不能超过3,最后一个数不能为负
                if (sum >= 0 && sum <= list.get(index - 1) + 3) {
                    res++;
                }
                return;
            }
            int last, end;
            if (index == 0) {
                last = base;        // 如果是第一个数,则从保底开始
                end = sum / n;        // 第一个数最大为平均分配的大小
            }else {
                last = list.get(index - 1); //不是第一个数则从前一个数的最大值
                end = Math.min(last + 3, sum / (n - index));
             // 最大值为剩下的人平均分配的平均数和上个数最大值加三中的最小值
            }
            for (int i = last;i<= end;i++ ) {
                list.add(i);
                distribution(index + 1, sum - i);
                list.remove(index);
            }
        }
    
    }

思路:

base * n + least < m

int least = 3 * n * (n - 1) / 2;

分的方式:基础的保底 + 后续的分配,基础的保底就是base * n

base 代表每个人至少分1个月饼,base至少为1

去掉保底部分后剩下的,最大值是等差数列,当你人数确定时,那么最大等差数列就确定了,如果是3 人,则去掉保底部分最大就是9(0 + 3 + 6)。

我们为了防重和方便计算,所以我们第一个数除去保底始终为0

举例3人12月饼和3人13月饼

3人12月饼:减去3个保底,9满足等差数列 ;(3人,12月饼 结果为6)

3人13月饼,减去3个保底,分配的情况为(1, 3, 6)。

那么将保底上升到2,需要计算的情况变为(0, 2, 5); ( 3人,13月饼 结果为5)

以3人为例只要数量超过3人的等差数列9,则可以将多的作为保底,化简问题

所以等差数列部分固定,找到最大的保底数,最大的保底数作为第一个数的最小值

按照等差数列的公式:

(A1 + An) * (n) / 2 => 可以得到 (0 + (0 + (n - 1) * d) * n / 2 => (n - 1) * n * 3 / 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/714345.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录——组合总和Ⅱ(Leetcode 40)需要回顾

题目链接 回溯 本题的难点在于&#xff1a;集合&#xff08;数组candidates&#xff09;有重复元素&#xff0c;但还不能有重复的组合。 思想&#xff1a;元素在同一个组合内是可以重复的&#xff0c;怎么重复都没事&#xff0c;但两个组合不能相同。所以要去重的是同一树…

购物车店铺列表查询流程

购物车店铺列表查询流程 购物车结算流程图

嵌入式门槛高不高,工资怎么样?

一般来说&#xff0c;嵌入式岗位的准入门槛其实并不是特别高。通常情况下&#xff0c;只要能够熟练掌握 C 语言编程以及单片机相关知识&#xff0c;就能够去制作一些较为简单的电子产品&#xff0c;由此可见其门槛相对而言是比较低的&#xff0c;相应的薪水可能也不会特别高。 …

I2C 总线通信技术基础

1.0 I2C 技术基础 使用总线的目的&#xff1a;采用串行总线技术可以使系统的硬件设计大大简化、系统的体积减小、可靠性提高&#xff0c;同时&#xff0c;系统的更改和扩充变的极为容易。 通信中常用的串行拓展总线 I2C&#xff08;Inter-Integrated Circuit &#xff09;总线…

C语言程序设计-6 循环控制

C语言程序设计-6 循环控制 循环结构是程序中一种很重要的结构。其特点是&#xff0c;在给定条件成立时&#xff0c;反复执行某程序 段&#xff0c;直到条件不成立为止。给定的条件称为循环条件&#xff0c;反复执行的程序段称为循环体。&#xff23;语 言提供了多种循环语句&a…

计算机网络知识点全面总结回顾

物理层 OSI模型&#xff1a;数据链路层&#xff08;流量控制&#xff09;&#xff0c;从传输层开始端到端&#xff1b;每一层的元素都称为实体&#xff0c;同一层的是对等实体&#xff1b;三个重要概念&#xff1a;服务&#xff08;下层为上层提供调用&#xff09;&#xff0c…

【Linux】进程间通信1——管道概念,匿名管道

1.进程间通信介绍 进程是计算机系统分配资源的最小单位&#xff08;严格说来是线程&#xff09;。每个进程都有自己的一部分独立的系统资源&#xff0c;彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作&#xff0c;才有了进程间通信。 进程间通信&#xff0c;顾名…

1055 集体照(测试点3, 4, 5)

solution 从后排开始输出&#xff0c;可以先把所有的学生进行排序&#xff08;身高降序&#xff0c;名字升序&#xff09;&#xff0c;再按照每排的人数找到中间位置依次左右各一个进行排列测试点3&#xff0c; 4&#xff0c; 5&#xff1a;k是小于10的正整数&#xff0c;则每…

记录一次root过程

设备: Redmi k40s 第一步&#xff0c; 解锁BL&#xff08;会重置手机系统&#xff01;&#xff01;&#xff01;所有数据都会没有&#xff01;&#xff01;&#xff01;&#xff09; 由于更新了澎湃OS系统, 解锁BL很麻烦, 需要社区5级以上还要答题。 但是&#xff0c;这个手机…

人工智能历史与现状

1 人工智能历史与现状 1.1 人工智能的概念和起源 1.1.1 人工智能的概念 人工智能 (Artificial Intelligence ,AI)是一门研究如何使计算机 能够模拟人类智能行为的科学和技术,目标在于开发能够感知、理解、 学习、推理、决策和解决问题的智能机器。人工智能的概念主要包含 以…

理解DDD设计

DDD的理解 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;是一种软件开发方法论&#xff0c;强调将业务领域作为软件设计的核心&#xff0c;以便更好地满足业务需求。DDD认为&#xff0c;软件开发的核心是理解业务&#xff0c;而不是实现技术。在D…

容器镜像外网同步方案

目录 一、目的 二、安装nexus 1、购买香港云主机​编辑 2、安装nexus 3、启动nexus 服务 4、放行安全组 三、配置nexus 1、登录nexus管理页面 2、修改nexus密码 3、创建 Blob 存储空间(可选) 4、创建 镜像代理仓库 5、Realms配置 四、拉取镜像 1、配置docker 2、…

【Python】Python实现解压rar文件

Python实现解压rar文件 零、需求 最近在开发一个填分数的应用&#xff0c;需要用到selenium&#xff0c;那么自然需要用到浏览器&#xff0c;浏览器内置到应用中&#xff0c;但是上传到GitCode的时候被限制了&#xff0c;单个文件大小只能是10M以内。所以只能压缩&#xff0c…

免费个人站 独立站 wordpress 自建网站

制作免费网站 | 免费网站构建器 | WordPress.com https://bioinformatics7.wordpress.com WordPress.com

运算符分为哪几类?哪些运算符常用作判断?简述运算符的优先级

运算符包含6大类&#xff1a;算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元&#xff08;目&#xff09;运算符。 逻辑运算符常用作布尔判断 typeof 运算符: typeof 运算符用于确定变量或表达式的数据类型&#xff0c;并返回一个表示类型的字符串。 typeof …

力扣 SQL题目

185.部门工资前三高的所有员工 公司的主管们感兴趣的是公司每个部门中谁赚的钱最多。一个部门的 高收入者 是指一个员工的工资在该部门的 不同 工资中 排名前三 。 编写解决方案&#xff0c;找出每个部门中 收入高的员工 。 以 任意顺序 返回结果表。 返回结果格式如下所示。 …

MFC工控项目实例之四在调试目录下创建指定文件夹

承接专栏《MFC工控项目实例之三theApp变量传递对话框参数》 在调试目录Debug下创建DATA、LIB、TEMP三个文件夹 1、SEAL_PRESSURE.h中添加代码 class CSeatApp : public CWinApp { ... public:CString m_Path;CString m_DataPath,m_TempPath,m_LibPath; ... };2、SEAL_PRESSURE…

leetcode 130被围绕的区域

思路 一个区域不能被围绕是这个区域有部分在边界 可以循环边界&#xff0c;找边界的区域&#xff08;利用深搜&#xff09;&#xff0c;这些都不能被围绕&#xff0c;其余的&#xff0c;能被围绕&#xff0c;应该从"O"变为”X“ 代码 static boolean[][] hasGo;/…

sigmoid函数

σ ( x ) 1 1 e − x \sigma(x)\frac1{1e^{-x}} σ(x)1e−x1​ sigmoid函数好处 1. σ ( x ) \sigma(x) σ(x)的域值是[0,1] &#xff0c;在(-∞, ∞)单调递增&#xff0c;很符合概率分布函数的特点 2.以 σ ( x ) \sigma(x) σ(x)为分布函数的概率密度函数在远离零点的位置…

微服务架构思考

时间&#xff1a;2024年06月16日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a; https://xima.tv/1_HvQZkj?_sonic0https://xima.tv/1_HvQZkj?_sonic0 大家好&#xff0c;欢迎来到小蒋聊技术&#xff0c…