Python入门习题(19)——CCF CSP认证考试真题:分蛋糕
问题描述
试题编号: 201703-1
试题名称: 分蛋糕
时间限制: 1.0s
内存限制: 256.0MB
问题描述
小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。
请问当小明的蛋糕分完时,总共有多少个朋友分到了蛋糕。
输入格式
输入的第一行包含了两个整数n, k,意义如上所述。
第二行包含n个正整数,依次表示a1, a2, …, an。
输出格式
输出一个整数,表示有多少个朋友分到了蛋糕。
样例输入
6 9
2 6 5 6 3 5
样例输出
3
样例说明
第一个朋友分到了前3块蛋糕,第二个朋友分到了第4、5块蛋糕,第三个朋友分到了最后一块蛋糕。
评测用例规模与约定
对于所有评测用例,1 ≤ n ≤ 1000,1 ≤ k ≤ 10000,1 ≤ ai ≤ 1000。
解题思路
- 分给一个人的蛋糕的编号是连续的。
- 分蛋糕的过程可以分解为多组分给下一人蛋糕的动作:
a. 从编号1开始,分第1人的蛋糕,记住未分配的蛋糕的最小编号b1。
b. 从编号b1开始,分第2人的蛋糕,记住未分配的蛋糕的最小编号b2。
c. 从编号b2开始,分第3人的蛋糕,记住未分配的蛋糕的最小编号b3。
…
只要未分配的蛋糕的最小编号小于等于n,那么重复执行分给下一人蛋糕的动作。最后一次分配,记住的未分配蛋糕的最小编号是n+1。 - 上述分蛋糕的过程中,分第m个人的蛋糕的终止条件是这个人的蛋糕合计总量大于k,或者这个人拿到最后一块蛋糕。
- 可以把分给一个人蛋糕的动作封装成一个函数。这个函数有3个参数,即蛋糕重量序列、k和未分配的蛋糕的最小编号,函数返回新的未分配的蛋糕的最小编号。
参考答案
n, k = [int(s) for s in input().split()] #列表推导式,得到整数列表,其中两个元素依次赋值给n, k
nums = [int(s) for s in input().split()]#分下一个人的蛋糕的函数,返回没分配的蛋糕的最小编号
def get_next_group(nums, k, start):total = 0for i in range(start, len(nums)):total += nums[i]if total >= k:return i + 1 #下一组的startreturn len(nums)count = 0
start = 0 #分给下一个人的蛋糕的起始编号
#nums下标0, 1, ...对应于蛋糕编号1, 2, ...
while start < len(nums):start = get_next_group(nums, k, start)count += 1print(count)
测试用例
题目中的样例输入和样例输出属于一种常规情形。下面给出其他特殊情形的测试用例。
- n = 1的情形
样例输入
1 5
2
样例输出
1 - 蛋糕多,人少的情形。不可能出现,因为分蛋糕的人可以是任意多。
- 分到蛋糕的每个人都分到大于等于k的蛋糕
样例输入
7 9
2 6 5 6 3 5 4
样例输出
3 - 蛋糕有多块,全分给第一个人的情形。
样例输入
3 20
2 6 5
样例输出
1
注:如果你找到未覆盖到的其他情形,请在评论中指出来,并给出样例输入和样例输出。
小结
- 提炼出“分给下一人蛋糕”函数的好处是:避免了容易引发错误的双重循环,而且代码变得更加清晰。是的,运用函数能够消除闹人的双重循环。
- 运用函数编写程序的习惯值得重视。这一做法能够使代码变得清晰,减少错误,提高编程效率。
Python入门习题(19)——CCF CSP认证考试真题:分蛋糕相关推荐
- python认证考试_Python入门习题(39)——CCF CSP认证考试真题:公共钥匙盒
CCF CSP认证考试真题:共钥匙盒 问题描述 试题编号:201709-2 试题名称:公共钥匙盒 时间限制:1.0s 内存限制:256.0MB 问题描述 有一个学校的老师共用N个教室,按照规定,所有的 ...
- python认证考试有哪些_Python入门习题(19)——CCF CSP认证考试真题:中间数
问题描述 试题编号:201703-1 试题名称:分蛋糕 时间限制:1.0s 内存限制:256.0MB 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, ...
- CCF CSP认证历年真题 满分代码(持续更新中)
目标 在接下来的半年到一年时间内,补全CCF认证历年真题(A-D)的满分代码(E题随缘). 考虑到CCF认证这个东西是可以混分的,我计划对D.E题额外增加部分分代码,或许有助于不同层次的选手备赛. 除 ...
- CCF CSP认证考试在线评测系统
关于CCF CSP认证考试在线评测系统 CCF CSP认证考试简介 CCF是中国计算机学会的简称.CCF计算机软件能力认证(简称CCF CSP认证考试)是CCF于2014年推出,是CCF计算机职业资格 ...
- 计算机考csp200分啥水平,计算机与信息工程学院成功举办第20次CCF CSP认证考试
2020年9月13日,计算机与信息工程学院在计算机大楼201举办第二十次CCF CSP认证考试.这是计算机与信息工程学院2019年12月与中国计算机学会签署协议.河南大学正式成为CSP认证考点以来,举 ...
- ccf csp认证考试的历年题集汇总
1.CCF历年试题解答_按题序 2.CCF认证考试题解目录 3.CCF CSP入坑指南 4.ccf 认证历年试题解答 5.CCF认证历年真题 _无题意 6.CCF-CSP认证备考要点 6.CCF认证历 ...
- oracle ocm 考题,2012年10 月oracle 10g ocm 认证 考试 真题 题库
更多考题请点击这里 OCM 10月份考试真题 Section 0 create database *45Minutes a)Create a database,the sid name is PROD ...
- CCF CSP认证考试题解目录
由于本人的书籍<算法详解(C++11 语言描述)>已经出版,为了降低题解的维护难度,有关CCF CSP考试的所有题解的更新将全部在书籍的配套仓库进行,CSDN博客中不再进行任何题解的更新. ...
- CCF CSP认证菜鸟刷题日志
CCF CSP菜鸟刷题日志(c/c++) 本萌新写给自己看的,要是有大佬路过,请多多指教orz 立个flag:每日一更,至201903 9月15ccf csp,冲鸭! 今天(2019.8.18)起每天 ...
最新文章
- [NodeJS]Node异步编程基础
- SSL/TLS握手过程
- SSM框架整合(一)
- 吴恩达机器学习笔记(三) —— Regularization正则化
- curl上传文件linux,在Linux中如何使用curl从一个服务器流式传输文件到另一个服务器(有限的服务器资源)...
- 【OS学习笔记】五 VirtualBox的下载、安装和配置
- 计算机科学分为几个部分,计算机由几部分组成各部分的功能是什么
- html超链接去虾线,熟虾怎么去虾线?熟虾去虾线方法介绍
- Biztalk2009安装全过程截图,x64平台需要手动更改运行模式
- java vo转map_Java后端必备的开发规范
- python海贼王logo_Python入门之生成海贼王云图
- VSS2005 使用方法
- 当toB产品经理遇到数据分析
- 关于华三路由器nat映射ftp端口号登录服务器失败问题
- 计算机视觉中的论文常见单词总结
- 使用CA签发的服务器证书搭建Tomcat双向SSL认证服务
- realsense D455读取深度图时,深度值不变问题解决方案
- smaba(跨平台文件共享)
- eclipse package,source folder,folder区别
- php读取excel并导入数据,PHPExcel读取excel并导入数据库