每位数字所用根数:
0 1 2 3 4 5 6 7 8 9
6 2 5 5 4 5 6 3 7 6
n最大是24,除去+=的4根 ABC所用根数的和最大为20
那么C最大不会超过1000
因为1000用了 2+6+6+6=20根
又因为C>A,C>B,则A、B均小于1000
预处理的时候 下标i即是数字,a【i】即是该数字所用的火柴数(对于下面两行代码的解释)
L=n-4-a[i]-a[j];
if(L==a[i+j])
完整代码:
#include <bits/stdc++.h>
using namespace std;
int a[2010];
int b[10]={6,2,5,5,4,5,6,3,7,6};
int gsum(int x)
{
int sum=0,w=0;
if(x==0)return 6;
while(x>0)
{
w=x%10;
x=x/10;
sum+=b[w];
}
return sum;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<=9;i++)a[i]=b[i];
for(int i=10;i<=2004;i++)
{
a[i]=gsum(i);
}
int L,ans=0;
for(int i=0;i<=1000;i++)
{
for(int j=0;j<=1000;j++)
{
L=n-4-a[i]-a[j];
if(L==a[i+j])ans++;///重点理解
}
}
printf("%d\n",ans);
}