2 条题解

  • 1
    @ 2024-10-8 19:49:40

    HJ1011 数字统计传送门

    题意

    ll~rr之间所有整数中包含的22的个数。


    微剧场~
    x:就这点儿?
    y:yes.
    x:Talk is cheap,show me the code.
    y:……
    

    思路(勿喷)

    第一步:数字各个位数拆分


    while(s > 1){//只要这个数没被除尽,就一直除。
        if(s%10 == 2) ans++;//如果当前位为2,答案加1。
        s /= 10;//删除当前位,进行下一位运算。
    }
    

    第二步:枚举ll~rr之间的所有数。


    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;
    }
    

    找不同: 多定义了一个ss,为什么呢? 答: 因为ii是每次循环要用到的,如果将ii写在whilewhile循环里,则ii每次都会被还原到11,于是,ii永远也无法达到rr,所以,我们需要另外定一个变量进行拆分。


    都看到这里了,点个赞吧

    信息

    ID
    741
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    259
    已通过
    58
    上传者