洛谷 P1980【计数问题】 题解(1)
鉴于数据最高只有七位数,通过判断数位,逐位判断即可完成本题。
(运行很快,打得手疼)
1 //Stand up for the faith! 2 #include<bits/stdc++.h> 3 using namespace std; 4 long judge(int i,int p,int j) 5 { 6 int a=0; 7 if(j==1) 8 { 9 if(i%10==p) a+=1; 10 } 11 else if(j==2) 12 { 13 if(i%10==p) a+=1; 14 if(i/10%10==p) a+=1; 15 } 16 else if(j==3) 17 { 18 if(i%10==p) a+=1; 19 if(i/10%10==p) a+=1; 20 if(i/100%10==p) a+=1; 21 } 22 else if(j==4) 23 { 24 if(i%10==p) a+=1; 25 if(i/10%10==p) a+=1; 26 if(i/100%10==p) a+=1; 27 if(i/1000%10==p) a+=1; 28 } 29 else if(j==5) 30 { 31 if(i%10==p) a+=1; 32 if(i/10%10==p) a+=1; 33 if(i/100%10==p) a+=1; 34 if(i/1000%10==p) a+=1; 35 if(i/10000%10==p) a+=1; 36 } 37 else if(j==6){ 38 if(i%10==p) a+=1; 39 if(i/10%10==p) a+=1; 40 if(i/100%10==p) a+=1; 41 if(i/1000%10==p) a+=1; 42 if(i/10000%10==p) a+=1; 43 if(i/100000%10==p) a+=1; 44 } 45 else if(j==7){ 46 if(i%10==p) a+=1; 47 if(i/10%10==p) a+=1; 48 if(i/100%10==p) a+=1; 49 if(i/1000%10==p) a+=1; 50 if(i/10000%10==p) a+=1; 51 if(i/100000%10==p) a+=1; 52 if(i/1000000%10==p) a+=1; 53 } 54 return a; 55 } 56 int main() 57 { 58 int n,x,wei,sum=0; 59 n=read(); 60 x=read(); 61 for(int i=1;i<=n;i++) 62 { 63 if(i>=1000000) wei=7; 64 else if(i>=0&&i<10) wei=1; 65 else if(i>=10&&i<100) wei=2; 66 else if(i>=100&&i<1000) wei=3; 67 else if(i>=1000&&i<10000) wei=4; 68 else if(i>=10000&&i<100000) wei=5; 69 else if(i>=100000&&i<1000000) wei=6; 70 71 sum+=judge(i,x,wei) ; 72 } 73 cout<<sum<<endl; 74 return 0; 75 }