用 while 循环反复整除 2,并统计长度第一次变为 1 的天数。
OJ: luogu
题目 ID: P5720
难度:入门
标签:python入门循环模拟
日期: 2026-07-15 18:22
题意
第一天木棍长度为 a。从第二天开始,每天长度变为原来的一半并向下取整。问第几天长度会变成 1。
思路
第一天已经算一天,所以 days = 1。只要长度还大于 1,就做一次 length //= 2,同时天数加一。循环结束时,长度第一次不大于 1;由于题目长度为正整数,这时就是 1。
brute.py 不适合这题,因为这个 while 模拟就是完整解法。
Python 知识
while length > 1:表示只要条件成立就继续循环。length //= 2是整数除法赋值,相当于length = length // 2。- 循环计数时要先确定初始状态是否已经算一次,本题第一天长度为
a,所以初始天数是1。
对应的本地 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:整数除法相关工具。
代码
python
length = int(input())
days = 1
while length > 1:
length //= 2
days += 1
print(days, end="")cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-07-27 00:00
* update_at: 2026-07-27 00:00
*/
#include <bits/stdc++.h>
using namespace std;
int main() {
int length; // 第一天木棍长度
cin >> length;
int days = 1; // 第一天已经算一天
// 每天长度折半(向下取整),直到长度为 1
while (length > 1) {
length /= 2;
days++;
}
cout << days << endl;
return 0;
}Pythonic 写法
while 折半:
python
a=int(input()); d=1
while a>1:
a//=2; d+=1
print(d)复杂度
每次长度至少减半,循环次数是
总结
当题目描述“反复做某个操作直到满足条件”时,while 循环很自然。关键是把初始天数和循环条件想清楚。