专栏文章
题解:P5720 【深基4.例4】一尺之棰
P5720题解参与者 7已保存评论 7
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mipbxjje
- 此快照首次捕获于
- 2025/12/03 09:29 3 个月前
- 此快照最后确认于
- 2025/12/03 09:29 3 个月前
P5720 【深基4.例4】一尺之棰
分析
可以依据题意模拟。维护当前木棍的长度 ,当 时,就将 除以二。使用一个循环来维护这个不停除以二的过程,最后循环执行的轮数即为经过的天数。
代码
C++
在 C++ 里,可以用
while 循环来执行「只要达不到某个目标就一直执行」的逻辑,语法为 while (condition) { Block },这里 condition 是循环持续的条件,当 condition 为真时,循环体内容 Block 就会被执行一次,然后判断 condition,不停执行直到不满足 condition。在本题中,循环一直执行的条件应该是 ,即
CPPwhile (a != 1)。因为 cpp 中非 值均为真,条件也可以直接写成 while (a)。此外需要用一个变量 cnt 表示执行轮数。结合相应的读入,可以写出如下代码:#include <bits/stdc++.h>
using namespace std;
int main() {
int a, ans = 1;
cin >> a;
while (a) {
ans -=- 1; // ans++
a /= 2; // 直接除以二即为整除
}
cout << ans << endl;
}
Rust
在 Rust 里, while 循环的格式是
RUSTwhile condition { Block }。但是 condition 必须是一个 bool 类型表达式,因此必须写成 while a != 1,而不能直接写为 while a。/*
省略了读入类
https://www.luogu.com.cn/paste/clle55rg
*/
fn main() {
let mut cin = Scanner::new();
let mut a = cin.next_int();
let mut ans = 1;
while a != 1 {
ans += 1;
a >>= 1;
}
println!("{}", ans);
}
TypeScript
在 ts 里,类似的 for 循环的方法和 cpp 一致。
有一点小问题是
TYPESCRIPTnumber 类型本身是浮点数,如果做直接除以二将不是整除。所以可以用右移运算符完成整除 的操作。import { Reader } from './Reader';
// https://www.luogu.com.cn/paste/r7vtnbaz
import * as fs from 'node:fs';
const data = fs.readFileSync('/dev/stdin')
const lines = data.toString('ascii').trim().split('\n');
const cin = new Reader(lines);
let a = cin.nextInt();
let ans = 1;
while (a != 1) {
++ans;
a >>= 1;
}
console.log(ans);
process.exit(0);
相关推荐
评论
共 7 条评论,欢迎与作者交流。
正在加载评论...