刷题笔记 - 3008.买笔

阅读(24)
评论(0)
Beginning

题目#

3008.买笔

代码#

# 方法1
x = int(input())

pen_4 = int(x/4)
surplus = x%4

if(surplus == 3):
    print('{:d} {:d} {:d}'.format(1, 1, pen_4-2))
elif(surplus == 2):
    print('{:d} {:d} {:d}'.format(1, 0, pen_4-1))
elif(surplus == 1):
    print('{:d} {:d} {:d}'.format(0, 1, pen_4-1))
else:
    print('{:d} {:d} {:d}'.format(0, 0, pen_4))
# 方法2
x = int(input())

pen_4 = int(x/4)
pen_5 = pen_6 =0

surplus = x%4

while surplus>0:
    pen_4 -= 1
    surplus += 4
    
    if surplus%5==0:
        pen_5 += 1
        surplus -= 5
    elif surplus%6==0:
        pen_6 += 1
        surplus -= 6
    
print('{:d} {:d} {:d}'.format(pen_6, pen_5, pen_4)) 

算法思想#

若想让笔的数量最大,应优先购买4元的。

以4为基准求余:

  • 剩1元,则4元钱的笔少买1支,换成1支5元笔;

  • 剩2元,则4元钱的笔少买1支,换成1支6元笔;

  • 剩3元,则4元钱的笔少买2支,换成1支5元笔和1支6元笔;

本题的主要思想是 贪心算法 ,方法1属于暴力解法,方法2有待优化(循环中的三块代码操作类似,可以通过函数来处理)

参考资料#

题解 3008.买笔

Ending

作者:Koi.C

出处:https://www.cnblogs.com/KoiC/p/17011390.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

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


欢迎关注个人公众号!

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