点击蓝字 关注我们
今天要做的是来自洛谷网站的P5720 【深基4.例4】一尺之棰。
https://www.luogu.com.cn/problem/P5720
有账号的可以上去做做。
P5720 【深基4.例4】一尺之棰
题目描述
《庄子》中说到,“一尺之棰,日取其半,万世不竭”。第一天有一根长度为 a 的木棍,从第二天开始,每天都要将这根木棍锯掉一半(每次除 2,向下取整)。第几天的时候木棍的长度会变为 1?输入一个正整数 a,表示木棍长度。
输入格式
输入一个正整数 a,表示木棍长度。
输出格式
输出一个正整数,表示要第几天的时候木棍长度会变为 1。
输入输出样例
解题思路
反复地做一个动作:锯掉一半——循环结构。
什么时候结束?木棍长度为1.
学过for循环和while循环。本题具体循环几次是不知道的,所以优先选择while循环。将结束条件作为循环条件。
或者也可以利用while True进行无限循环,利用if判断是否木棍长度为1了,然后跳出循环。
需要输出结果是天数。没循环一次就是一天,可以用变量day来累计。
步骤拆解:
读取木棍长度a
初始化变量day
while循环
day加1 ,a除以2并向下取整
输出结果
知识点
input()获取数据,int()转换为整数
while True:无限循环
判断是否相等==
本题向下取整可以直接用//
参考代码
逐句解析
n=int(input()):读取初始木棍长度,转为整数。
day=1初始化天数,一开始就是第 1 天。:
while n!=1:只要木棍长度还不等于 1,就一直循环切割。
n=n//2 木棍长度除以 2,向下取整。
day+=1:切割一次,天数加一天。
print(day):长度变成 1,退出循环,输出天数。
while循环部分也可以用以下做法:
如果你觉得意犹未尽,那就趁热打铁,继续挑战一下吧!
a=5,执行 a = a//2,a 的值为()
A. 2.5 B. 2 C. 3 D. 1
2、小明手上有一份糖果,一共有 n 颗。每天晚上吃掉当前糖果数量一半再加 1 颗,吃到剩下 1 颗糖果 的时候就不再吃了。已知第一天糖果数量就是 n,请你求出吃到只剩 1 颗时,一共经过了多少天。
输入格式 :输入一个正整数 n。
输出格式 :输出一个整数,代表剩余 1 颗糖果时的天数。