思路:由图知, 0 ∼ 9 0 \sim 9 0∼9 的贡献值分别为 6 6 6, 2 2 2, 5 5 5, 5 5 5, 4 4 4, 5 5 5, 6 6 6, 3 3 3, 7 7 7, 6 6 6。
再仔细观察,我们发现 0 0 0, 6 6 6, 9 9 9 的贡献值相同,都是 9 9 9。同样的, 2 2 2, 3 3 3, 5 5 5 的贡献值也相同。剩下的就是不相同的贡献值。
我们将其分为 6 6 6 类:
-
0 0 0, 6 6 6, 9 9 9 为一类,贡献值为 9 9 9。
-
2 2 2, 3 3 3, 5 5 5 为一类,贡献值为 5 5 5。
-
1 1 1 单独为一类,贡献值为 2 2 2。
-
4 4 4 单独为一类,贡献值为 4 4 4。
-
7 7 7 单独为一类,贡献值为 3 3 3。
-
8 8 8 单独为一类,贡献值为 7 7 7。
参考代码:
#include <iostream>
#include <cstdio>
using namespace std;
int l, r;
int s = 0;
int main()
{
scanf("%d %d", &l, &r);
for(int i = l; i <= r; i ++)
{
int d = i;
while(d != 0)
{
if(d % 10 == 0 || d % 10 == 6 || d % 10 == 9) s += 6;//第1类
else if(d % 10 == 2 || d % 10 == 3 || d % 10 == 5) s += 5;//第2类
else if(d % 10 == 1) s += 2;//第3类
else if(d % 10 == 4) s += 4;//第4类
else if(d % 10 == 7) s += 3;//第5类
else s += 7;//第6类
d /= 10;//每一循环除以10,每次删除这个数的最后一位
}
}
printf("%d\n", s);
return 0;
}