2 条题解
-
1
HJ1011 数字统计传送门
题意
求~之间所有整数中包含的的个数。
微剧场~ x:就这点儿? y:yes. x:Talk is cheap,show me the code. y:……
思路(勿喷)
第一步:数字各个位数拆分
while(s > 1){//只要这个数没被除尽,就一直除。 if(s%10 == 2) ans++;//如果当前位为2,答案加1。 s /= 10;//删除当前位,进行下一位运算。 }
第二步:枚举~之间的所有数。
for(int i = l; i <= r; i++){ //中间省略。 }
第三步:组合代码
#include<bits/stdc++.h> using namespace std; int main(){ int ans = 0; int l, r; cin >> l >> r; for(int i = l; i <= r; i++){ while(i > 1){//只要这个数没被除尽,就一直除。 if(i%10 == 2) ans++;//如果当前位为2,答案加1。 i /= 10;//删除当前位,进行下一位运算。 } } cout << ans; return 0; }
不过,如果你看到这里就划(复制代码)走了,那么……
微剧场~ x:你还要脸吗?!我用了你的代码怎么TLE了!!!(怒 y:谁让你用我代码的?(笑 x:……
正解(请勿复制,虽然我知道这句话没用……)
#include<bits/stdc++.h> using namespace std; int main(){ int ans = 0; int l, r; cin >> l >> r; for(int i = l; i <= r; i++){ int s = i; while(s > 1){//只要这个数没被除尽,就一直除。 if(s%10 == 2) ans++;//如果当前位为2,答案加1。 s /= 10;//删除当前位,进行下一位运算。 } } cout << ans; return 0; }
找不同: 多定义了一个,为什么呢? 答: 因为是每次循环要用到的,如果将写在循环里,则每次都会被还原到,于是,永远也无法达到,所以,我们需要另外定一个变量进行拆分。
都看到这里了,点个赞吧
信息
- ID
- 741
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 259
- 已通过
- 58
- 上传者