刷题笔记 - 3005.糖果游戏

阅读(30)
评论(0)
Beginning

题目#

3005.糖果游戏

代码#

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 国际」许可协议进行许可。

声明:转载或使用请注明本文地址,感谢您的阅读!如果文章内容帮到了您,烦请点一下推荐,不胜感激!


欢迎关注个人公众号!

posted @   KoiC  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
more_horiz
keyboard_arrow_up dark_mode menu palette
选择主题
点击右上角即可分享
微信分享提示