洛谷 P1980【计数问题】 题解

鉴于数据最高只有七位数,通过判断数位,逐位判断即可完成本题。

(运行很快,打得手疼)


#include<bits/stdc++.h> 
using namespace std;
long judge(int i,int p,int j)
{   
    int a=0;

    if(j==1){
        if(i%10==p)         a+=1;
    }     

    else if(j==2){
        if(i%10==p)         a+=1;
        if(i/10%10==p)      a+=1;
    }

    else if(j==3){
        if(i%10==p)         a+=1;
        if(i/10%10==p)      a+=1;
        if(i/100%10==p)     a+=1;
    }     

    else if(j==4){
        if(i%10==p)         a+=1;
        if(i/10%10==p)      a+=1;
        if(i/100%10==p)     a+=1;
        if(i/1000%10==p)    a+=1;
    }

    else if(j==5){
        if(i%10==p)         a+=1;
        if(i/10%10==p)      a+=1;
        if(i/100%10==p)     a+=1;
        if(i/1000%10==p)    a+=1;
        if(i/10000%10==p)   a+=1;
    }

    else if(j==6){
        if(i%10==p)         a+=1;
        if(i/10%10==p)      a+=1;
        if(i/100%10==p)     a+=1;
        if(i/1000%10==p)    a+=1;
        if(i/10000%10==p)   a+=1;
        if(i/100000%10==p)  a+=1;
    }

    else if(j==7){
        if(i%10==p)         a+=1;
        if(i/10%10==p)      a+=1;
        if(i/100%10==p)     a+=1;
        if(i/1000%10==p)    a+=1;
        if(i/10000%10==p)   a+=1;
        if(i/100000%10==p)  a+=1;
        if(i/1000000%10==p) a+=1;
    } 
    return a;
}
int main()
{
    int n,x,wei,sum=0;
    cin>>n>>x;
    for(int i=1;i<=n;i++){
        if(i>=1000000)                  wei=7;
        else if(i>=0&&i<10)             wei=1;
        else if(i>=10&&i<100)           wei=2;
        else if(i>=100&&i<1000)         wei=3;
        else if(i>=1000&&i<10000)       wei=4;
        else if(i>=10000&&i<100000)     wei=5;
        else if(i>=100000&&i<1000000)   wei=6;

        sum+=judge(i,x,wei) ; 
}
        cout<<sum;
        return 0;
}

猜你喜欢

转载自www.cnblogs.com/KGB1331/p/10581055.html