小玉买文具

GitHub跳转原题关系图返回列表

先把元角统一换成角,再用整除计算最多能买多少支笔。

OJ: luogu

题目 ID: P1421

难度:入门

标签:python入门数学

日期: 2026-07-15 17:56

题意

小玉有 ab 角。一支签字笔价格是 19 角,求最多可以买多少支。

思路

先统一单位,把所有钱都换成“角”:

  • ab 角等于 a * 10 + b 角;
  • 一支笔等于 19 角。

最多能买多少支,就是总角数里有多少个完整的 19,用整数除法即可。

brute.py 不适合这篇 Python 教学题解。虽然可以每次减去 19 角来模拟购买,但本题真正要训练的是单位换算和 // 整除。

Python 知识

  • // 是整数除法,结果向下取整,正好表示“最多能买多少个完整物品”。
  • money = a * 10 + b 把复合单位转成单一单位。
  • print(money // 19) 直接输出整数答案。

对应的本地 Python 笔记:

  • /home/rainboy/mycode/hugo-blog/content/program_language/python/input_output_and_strings.md:整数输入与输出。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/math_tools.md:整数运算与 divmod/整除关系。
  • /home/rainboy/mycode/hugo-blog/content/program_language/python/oj_input_output_cheatsheet.md:单个答案输出。

代码

python
a, b = map(int, input().split())

money = a * 10 + b
print(money // 19)

Pythonic 写法

整数运算:

python
a, b = map(int, input().split())
print((a * 10 + b) // 19)

复杂度

只做常数次运算,时间复杂度 O(1)O(1),空间复杂度 O(1)O(1)

总结

遇到元角、小时分钟这类复合单位,先统一成一个最小单位。统一之后,很多题就只剩一次整除或取余。