【欧拉计划】17. Number letter counts

(本题取 $n=1000$)

【思路】本题细节较多,可先预处理一些数的字母个数,这样后面的数就可以由前面递推而来。时间复杂度为 $\mathcal O(n)$。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<stdio.h>
int ans,a[1001]={0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8};
void init()
{
a[20]=a[30]=6;
a[40]=a[50]=a[60]=5;
a[70]=7;
a[80]=a[90]=6;
a[1000]=11;
for(int i=20;i<100;++i)
{
if(i%10==0)continue;
a[i]=a[i/10*10]+a[i%10];
}
}
int main()
{
init();
for(int i=1;i<=1000;++i)
{
if(a[i])ans+=a[i];
else if(i%100)ans+=a[i/100]+10+a[i%100];
else ans+=a[i/100]+7;
}
printf("%d",ans);
return 0;
}

【欧拉计划】17. Number letter counts

https://hensier.github.io/projecteuler/17/

作者

hensier

发布于

2022-05-01

更新于

2023-01-02

许可协议

评论