刷题笔记 - 3005.糖果游戏
Beginning
题目#
代码#
li = list(map(int,input().strip().split()))
lenth = len(li)
for i in range(lenth):
# 设置当前位置的左右位置
if i>0 and i<lenth-1:
left = i-1
right = i+1
elif i==0:
left = lenth-1
right = i+1
elif i==lenth-1:
left = i-1
right = 0
# 分糖果
li[i] = int(li[i] / 3)
li[left] = li[left] +li[i]
li[right] = li[right] +li[i]
for i in range(lenth):
print('{:>5d}'.format(li[i]),end='')
算法思想#
总结本题题意:5 个小朋友以一个环坐下,每个人要将自己的糖果分成 3 份,其中 2 份分别给左右相邻的小朋友,自己留一份,但不足 1/3 的要吃掉,求一轮之后各个小朋友拥有的糖果数量。
最初是计划通过环形链表来实现,但过于复杂,所以通过左右指针来解决这个问题。
首先,通过 if 语句查找每个位置的左右位置,其中首位和末位的需要单独设置。此处要养成良好的编码习惯,将条件符合更多的部分置于前面,将少的置于后面,以减少无用判断的次数。
位置确定之后执行分糖果的操作。实际上,只需要求出当前糖果数量 1/3 的 整数部分(小数部分可看作是要吃掉的多余糖果),同时给左右位置也加上这 1/3 即可。
最后通过循环格式化输出来匹配题目要求的格式。本题代码中所用format格式可查阅 刷题笔记 - 1807.[编程基础]输入输出练习之格式控制 这篇文章。
Ending
作者:Koi.C
出处:https://www.cnblogs.com/KoiC/p/16986704.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
声明:转载或使用请注明本文地址,感谢您的阅读!如果文章内容帮到了您,烦请点一下推荐,不胜感激!
欢迎关注个人公众号!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端