问题描述

试题编号: 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。

解题思路

  1. 分给一个人的蛋糕的编号是连续的。
  2. 分蛋糕的过程可以分解为多组分给下一人蛋糕的动作:
    a. 从编号1开始,分第1人的蛋糕,记住未分配的蛋糕的最小编号b1。
    b. 从编号b1开始,分第2人的蛋糕,记住未分配的蛋糕的最小编号b2。
    c. 从编号b2开始,分第3人的蛋糕,记住未分配的蛋糕的最小编号b3。

    只要未分配的蛋糕的最小编号小于等于n,那么重复执行分给下一人蛋糕的动作。最后一次分配,记住的未分配蛋糕的最小编号是n+1。
  3. 上述分蛋糕的过程中,分第m个人的蛋糕的终止条件是这个人的蛋糕合计总量大于k,或者这个人拿到最后一块蛋糕。
  4. 可以把分给一个人蛋糕的动作封装成一个函数。这个函数有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)

测试用例

题目中的样例输入和样例输出属于一种常规情形。下面给出其他特殊情形的测试用例。

  1. n = 1的情形
    样例输入
    1 5
    2
    样例输出
    1
  2. 蛋糕多,人少的情形。不可能出现,因为分蛋糕的人可以是任意多。
  3. 分到蛋糕的每个人都分到大于等于k的蛋糕
    样例输入
    7 9
    2 6 5 6 3 5 4
    样例输出
    3
  4. 蛋糕有多块,全分给第一个人的情形。
    样例输入
    3 20
    2 6 5
    样例输出
    1

注:如果你找到未覆盖到的其他情形,请在评论中指出来,并给出样例输入和样例输出。

小结

  1. 提炼出“分给下一人蛋糕”函数的好处是:避免了容易引发错误的双重循环,而且代码变得更加清晰。是的,运用函数能够消除闹人的双重循环。
  2. 运用函数编写程序的习惯值得重视。这一做法能够使代码变得清晰,减少错误,提高编程效率。

Python入门习题(19)——CCF CSP认证考试真题:分蛋糕相关推荐

  1. python认证考试_Python入门习题(39)——CCF CSP认证考试真题:公共钥匙盒

    CCF CSP认证考试真题:共钥匙盒 问题描述 试题编号:201709-2 试题名称:公共钥匙盒 时间限制:1.0s 内存限制:256.0MB 问题描述 有一个学校的老师共用N个教室,按照规定,所有的 ...

  2. python认证考试有哪些_Python入门习题(19)——CCF CSP认证考试真题:中间数

    问题描述 试题编号:201703-1 试题名称:分蛋糕 时间限制:1.0s 内存限制:256.0MB 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, ...

  3. CCF CSP认证历年真题 满分代码(持续更新中)

    目标 在接下来的半年到一年时间内,补全CCF认证历年真题(A-D)的满分代码(E题随缘). 考虑到CCF认证这个东西是可以混分的,我计划对D.E题额外增加部分分代码,或许有助于不同层次的选手备赛. 除 ...

  4. CCF CSP认证考试在线评测系统

    关于CCF CSP认证考试在线评测系统 CCF CSP认证考试简介 CCF是中国计算机学会的简称.CCF计算机软件能力认证(简称CCF CSP认证考试)是CCF于2014年推出,是CCF计算机职业资格 ...

  5. 计算机考csp200分啥水平,计算机与信息工程学院成功举办第20次CCF CSP认证考试

    2020年9月13日,计算机与信息工程学院在计算机大楼201举办第二十次CCF CSP认证考试.这是计算机与信息工程学院2019年12月与中国计算机学会签署协议.河南大学正式成为CSP认证考点以来,举 ...

  6. ccf csp认证考试的历年题集汇总

    1.CCF历年试题解答_按题序 2.CCF认证考试题解目录 3.CCF CSP入坑指南 4.ccf 认证历年试题解答 5.CCF认证历年真题 _无题意 6.CCF-CSP认证备考要点 6.CCF认证历 ...

  7. oracle ocm 考题,2012年10 月oracle 10g ocm 认证 考试 真题 题库

    更多考题请点击这里 OCM 10月份考试真题 Section 0 create database *45Minutes a)Create a database,the sid name is PROD ...

  8. CCF CSP认证考试题解目录

    由于本人的书籍<算法详解(C++11 语言描述)>已经出版,为了降低题解的维护难度,有关CCF CSP考试的所有题解的更新将全部在书籍的配套仓库进行,CSDN博客中不再进行任何题解的更新. ...

  9. CCF CSP认证菜鸟刷题日志

    CCF CSP菜鸟刷题日志(c/c++) 本萌新写给自己看的,要是有大佬路过,请多多指教orz 立个flag:每日一更,至201903 9月15ccf csp,冲鸭! 今天(2019.8.18)起每天 ...

最新文章

  1. [NodeJS]Node异步编程基础
  2. SSL/TLS握手过程
  3. SSM框架整合(一)
  4. 吴恩达机器学习笔记(三) —— Regularization正则化
  5. curl上传文件linux,在Linux中如何使用curl从一个服务器流式传输文件到另一个服务器(有限的服务器资源)...
  6. 【OS学习笔记】五 VirtualBox的下载、安装和配置
  7. 计算机科学分为几个部分,计算机由几部分组成各部分的功能是什么
  8. html超链接去虾线,熟虾怎么去虾线?熟虾去虾线方法介绍
  9. Biztalk2009安装全过程截图,x64平台需要手动更改运行模式
  10. java vo转map_Java后端必备的开发规范
  11. python海贼王logo_Python入门之生成海贼王云图
  12. VSS2005 使用方法
  13. 当toB产品经理遇到数据分析
  14. 关于华三路由器nat映射ftp端口号登录服务器失败问题
  15. 计算机视觉中的论文常见单词总结
  16. 使用CA签发的服务器证书搭建Tomcat双向SSL认证服务
  17. realsense D455读取深度图时,深度值不变问题解决方案
  18. smaba(跨平台文件共享)
  19. eclipse package,source folder,folder区别
  20. php读取excel并导入数据,PHPExcel读取excel并导入数据库

热门文章

  1. 全国空气质量网址解析
  2. input只读模式下IE表现
  3. dubbo负载均衡。
  4. linux关闭smb命令,linux – smbclient的退出代码
  5. 【系统之家】win7 32位64位纯净版系统(可修改浏览器主页)
  6. 雪域高原,飘起“联想 智慧中国”红
  7. iOS WCDB 使用
  8. 设计模式之中介者模式详解
  9. ESP8266新手入门------百家长,附带STM32程序等
  10. 第31天:WEB漏洞~文件操作之文件包含漏洞全解