水题 第一站 关于521
2017-07-08 20:00
281 查看
之前做过的一道题,不过貌似当时仅仅也只是看懂了而已,将数字转化为字符串,然后运用字符串的函数完成的,这样完成的意义不大。
见到这个题目的第一想法就是暴力,两个函数,一个愤怒,一个非常愤怒。但是没有出结果。
(1)运用逐位判断的方法,即除余相结合
(2)有的细节没注意到,对了好几遍才发现错误原因
(3)还是不太理解打表法,大概是依次迭代吧!
(4)另外太大的数组最好在main函数外声明。
见到这个题目的第一想法就是暴力,两个函数,一个愤怒,一个非常愤怒。但是没有出结果。
(1)运用逐位判断的方法,即除余相结合
(2)有的细节没注意到,对了好几遍才发现错误原因
(3)还是不太理解打表法,大概是依次迭代吧!
(4)另外太大的数组最好在main函数外声明。
#include <stdio.h> #include <math.h> using namespace std; int ans[2][1000001]={0}; int main() { int a, b; for(int i=125; i<1000000; i++) { if(( i%10==1 || (i/10)%10==1 || (i/100)%10==1 || (i/1000)%10==1 ||(i/10000)%10==1|| i/100000==1) && ( i%10==2 || (i/10)%10==2 || (i/100)%10==2 || (i/1000)%10==2 || (i/10000)%10==2||i/100000==2) &&( i%10==5 || (i/10)%10==5 || (i/100)%10==5 || (i/1000)%10==5 || (i/10000)%10==5||i/100000==5)) ans[0][i]=ans[0][i-1]+1; else ans[0][i]=ans[0][i-1]; if(i%1000==521 || (i/10)%1000==521 || (i/1 b811 00)%1000==521|| i/1000==521) ans[1][i]=ans[1][i-1]+1; else ans[1][i]=ans[1][i-1]; } int m=0; while (scanf("%d %d",&a, &b)!=EOF) { printf("Case %d:",++m); printf("%d %d\n",ans[0][b]-ans[0][a-1],ans[1][b]-ans[1][a-1]); } return 0; }