洛谷-P1980 计数问题
题目描述
试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1,2,3,4,5,6,7,8,9,10,11中,数字1出现了4次。
输入格式
2个整数n,x,之间用一个空格隔开。
输出格式
1个整数,表示x出现的次数。
输入输出样例
输入 #1
11 1
输出 #1
4
说明/提示
对于100%的数据,1≤n≤1,000,000,0≤x≤9。
C++代码
枚举
#include <iostream>
using namespace std;
int countx(int n, int x) {
int count=0;
while(n) {
if(n%10==x)
++count;
n/=10;
}
return count;
}
int main() {
int n,x,i,sum=0;
cin>>n>>x;
for(i=1;i<=n;++i)
sum+=countx(i,x);
cout<<sum<<endl;
return 0;
}
动态规划
#include <iostream>
using namespace std;
int a[1000005];
int dp(int n, int x) {
a[n]=(n%10==x)?a[n/10]+1:a[n/10];
return a[n];
}
int main() {
int n,x,sum=0;
cin>>n>>x;
for(int i=1;i<=n;++i)
sum+=dp(i,x);
cout<<sum<<endl;
return 0;
}