直接模拟,不过我比较笨花了好长时间
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<map>
#include<string.h>
using namespace std;
int a[1010];
int b[1010]= {0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8,6};
int main()
{
b[30]=6;
b[40]=5;
b[50]=5;
b[60]=5;
b[70]=7;
b[80]=6;
b[90]=6;
b[1000]=11;
int t;
scanf("%d",&t);
int m,len,k,p;
int sum=0;
for(int i=1; i<=t; i++)
{
scanf("%d",&a[i]);
sum=0;
for(int j=1; j<=a[i]; j++)
{
if(j==1000)
{
sum+=b[j];
}
else
{
if(j/100)
{
sum+=b[j/100];
sum+=7;
if(j%100<=20&&j%100>0)
{
sum+=b[j%100];
sum+=3;
}
else if(j%100>20)
{
m=j%100;
sum+=b[m%10];
sum+=b[m-m%10];
sum+=3;
}
}
else
{
if(j>0&&j<=20)
sum+=b[j];
else
{
sum+=b[j%10];
sum+=b[j-j%10];
}
}
}
}
printf("%d\n",sum);
}
return 0;
}