第一篇CSDN,有点小激动.
预处理出每一个数字的火柴棍数量,然后两层循环寻找合适的等式。注意需要开出两倍(1000+1000左右)。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
int a[11]={6,2,5,5,4,5,6,3,7,6},num[2005],ans=0;
int main()
{
int n;
cin>>n;
n=n-4;
for(int i=0;i<=1999;i++)
{
if(i<10)
{
num[i]=a[i];
}
else if(i<100)
{
num[i]=a[i%10]+a[i/10];
}
else if(i<1000)
{
num[i]=a[i%10]+a[(i%100)/10]+a[i/100];
}
else
{
num[i]=a[i/1000]+a[(i/100)%10]+a[(i/10)%10]+a[i%10];
}
}
for(int i=0;i<=999;i++)
for(int j=0;j<=999;j++)
{
if(num[i]+num[j]+num[i+j]==n)
{
ans++;
// cout<<'\n'<<"ans:"<<i<<'+'<<j<<'='<<i+j;
}
}
cout<<ans;
return 0;
}