题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
有两种方法:
1.数位DP算法
2.暴力打表——真是个好法子!!!
接下来是注意点:
1.一般这种数组中的一个数减去一个数组的另一个数,sum[i]-sum[j],这时候就要注意是sum[i]-sum[j]还是sum[i]-sum[j-1]
2.打表就不要进行多余的循环和语句
题目代码:
#include<iostream> using namespace std; int sum[1000003]={0}; int solve(int n) {int pre=0,now=0;while(n>0){now=n%10;if(now==4)return 0;if(now==6&&pre==2)return 0;n=n/10;pre=now;}return 1; } int main() {int n,m;for(int i=1;i<=1000000;i++){sum[i]=sum[i-1];if(solve(i))sum[i]++;}while(cin>>n>>m){if(n==0&&m==0)break;cout<<sum[m]-sum[n-1]<<endl;} }