首页 > 编程语言 >【Python】练习:分糖果Ⅱ

【Python】练习:分糖果Ⅱ

时间:2024-06-06 23:04:43浏览次数:14  
标签:分发 Python 练习 0.5 int 完整 糖果 col row

读题,发糖规则为逐个递增分发,发现分发的糖果成等差数列,最后的(不够继续分的)需特殊讨论。

思考要怎么做——前面的完整分发轮次和后面的不完整分发轮次分开。

出现新的问题,怎么知道有多少完整的轮次——row?

注意,要求多少轮,不是用糖数整除人数(平均分)求出,而是用利用数列元素数整除人数,加之不等式以及等差数列求和得出。

那我们利用谁来进行不等式?——剩余糖数——大于0,小于p+1

 

C表示总糖数,p(1+p)/2表示前 p项和,相减得到剩余糖数。

Sn=n(a1+an)/2=na1+n(n-1)d/2

下面就利用不等式的相关性质计算不等式。

注意,计算到p(p+1)时,通过把不等式拆成两个不等式解出p的范围。

 

p只能取整数

row=p//n (数列元素数整除人数)

求出非完整回合有多少个 ?——col

col=p%n 

解决了关键问题之后,后面的就可以之间用for循环+if判断完成 

定义列表,后面采取列表的替换,初始定义为0,有n个元素 

d=[0]*n

 后面如果是能在完整回合分发结束时,即首项为i+1,公差为n(人),总共有row项

d[i]=row*(i+1)+row*(row-1)*n*0.5

 若在非完整回合才分发结束,即需要再加上第(row+1)项

an=a1+(n-1)d

d[i]+=(i+1)+row*n

 对于最后剩下的不能完整分发的,把他加给最后一个人,即第(col+1)个人,即d[col]

注意,col指的是完整数列的元素

d[col]+=r 

补充求一下数列外剩下的

r=C-p*(1+p) *0.5

完整代码如下 

class Solution:
    def distributeCandies(self, candies: int, num_people: int) -> List[int]:
        n = num_people
        c = candies
        p = int((2 * c + 0.25) ** 0.5 - 0.5)
        r = int(c - (p + 1) * p * 0.5)
        row = p // n
        col = p % n

        d = [0] * n
        for i in range(n):  # 只循环n次
            # 完整循环回合
            d[i] = int(row * (i + 1) + row * (row - 1) * n * 0.5)  # 等差数列公式
            # 非完整回合的恰当分发
            if i < col:
                d[i] += int(row * n + i + 1)
        # 最后剩下的加到最后一项
        d[col] += r
        return d

标签:分发,Python,练习,0.5,int,完整,糖果,col,row
From: https://blog.csdn.net/2302_81240667/article/details/139511064

相关文章

  • Python实现简单负载均衡
    使用场景,最近在研究把废弃的安卓手机利用起来跑python代码,但是有好多台安卓手机。我就想着把其中一台拿来做负载均衡,然后分配给其他4台烂手机,哈哈哈,废物再利用。至于安卓怎么跑python代码,就自己查一下相关资料了哈,这里就不赘述了。 importrequestsimportthreadingimport......
  • Python中的“点阵字体”
    “点阵字体”是个啥?,在python中怎么使?在现在全面高清的5G5G5G时代,它还有用“武”之地?(笔记模板由python脚本于2024年06月01日18:44:31创......
  • 基于Python的实验室管理系统的设计与实现(论文+源码)_kaic
    摘 要随着实验室设备越来越多,实验室及其设备管理工作变得越来越繁重,还存在些管理模式仍旧处于手工管理模式和一些抢占实验室的不文明现象,传统的手工模式已经满足不了日益增长的管理需求,而本系统摒弃传统模式,开启新式的实验室管理模式。在需求进行分析的基础上,采用Python语言......
  • 基于Python的街区医院管理系统的设计与实现(论文+源码)_kaic
    基于Python的街区医院管理系统的设计与实现摘 要采用Python语言、Mysql数据库,在IDEA平台下实现了街区医院管理系统,利用街道医疗机构的管理系统,不仅能够有效地进行信息管理,促进各部门之间的有序合作,还能够大幅改善医疗环境,极大地改善病人的就诊体验,并且能够更加有效地满......
  • 运筹学习题Python精解——线性规划
    题1某企业有三个车间生产同一种产品。每件产品由四个零件1和三个零件2组成。两个零件需耗用两种原材料A和B。已知这两种原材料的供应量分别为300kg和500kg。由于三个车间拥有的设备及工艺条件不同,每个工班原材料耗用量和零件产量也不同。见下表(三个车间每班用料和生产......
  • Python-GEE遥感云大数据分析、管理与可视化
    随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域、多尺度海量遥感数据处理需求。为解......
  • python爬虫学习路径
    python爬虫学习路径阶段一:Python基础(预计1-2周)里程碑1:掌握Python基础语法数据类型(字符串、列表、字典等)控制流(条件语句、循环语句)函数定义与使用模块导入与使用文件读写操作学习资源:廖雪峰Python教程Python官方文档CodecademyPython课程练习......
  • 【2024最新】Python 学习路线分享
    学习资料已打包,需要的小伙伴可以戳这里学习资料整理了一份Python学习路线。内容依然是从入门到进阶,既有教程,也有经典书籍推荐,还有实战开源项目。Python的发展方向还是挺多的,比如服务端开发,爬虫,数据分析,机器学习等,本文推荐的内容全部是服务端开发,Web开发方向。主......
  • python: 如何将方法对象和类实例对象序列化
    文章目录1.Json序列化2.Pickle序列化1.Json序列化在python中对于一般数据的序列化保存经常使用的就是json序列化json序列化可序列的对象:一般数据类型列表,字典,字符串,数字,布尔值,None等json可以序列化的对象类型: 基本数据类型: None 布尔值:True,False 数......
  • python的datetime使用时区转换的注意事项
    由于做美股的开始,经常用到需要将utc时间转换成美东时间,或者美东时间转换为utc时间。美东时间涉及到一个夏令时,一个冬令时,不同的阶段与utc时间的时区相差不同的时间段 以前我一直用pytz的三方模块给datetime赋值时区信息,然后生成的对象用astimezone的方法,转换到对应的时区信息......