鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2089
數位dp經典入門題,這裏給出一種簡單做法。
#include<bits/stdc++.h>
typedef long long ll;
typedef long double ld;
#define INF 0x3f3f3f3f
#define MOD 1e+6
int main(){
int n, m, ans;
int i, j;
while(scanf("%d %d", &n, &m) && n && m){
ans = 0;
for(i = n; i <= m; ++i){
int tmp = i;
while(tmp){
if(tmp % 10 == 4){
ans++;
break;
}
if(tmp % 100 == 62){
ans++;
break;
}
tmp /= 10;
}
}
printf("%d\n", m-n+1-ans);
}
return 0;
}
注意點:只能記錄非吉利數的個數,最後再相減得到答案(m-n+1-ans), 直接計數會超時,因爲非吉利數要比吉利數要少得多,執行次數也就少的多。(要直接計算的話,要打表預處理)