- 火柴棒等式
- 2015-08-06 09:36:33 @
#include<cstdio>
#include<cstring>
int a[10]={6,2,5,5,4,5,6,3,7,6};
using namespace std;
int main()
{
int n,ans=0,x,y,z,t;
scanf("%d",&n);
n=n-4;
for(int i=0;i<=2000;i++)
{
if(i>=1000) x=a[i/1000]+a[i%10]+a[i%100/10]+a[i%1000/100];
else if(i>=100) x=a[i/100]+a[i%10]+a[i%100/10];
else if(i>=10) x=a[i/10]+a[i%10];
else x=a[i];
for(int j=0;j<=2000;j++)
{
if(j>=1000) y=a[j/1000]+a[j%10]+a[j%100/10]+a[j%1000/100];
else if(j>=100) y=a[j/100]+a[j%10]+a[j%100/10];
else if(j>=10) y=a[j/10]+a[j%10];
else y=a[j];
t=i+j;
if(t>=1000) z=a[t/1000]+a[t%10]+a[t%100/10]+a[i%1000/100];
else if(t>=100) z=a[t/100]+a[t%10]+a[t%100/10];
else if(t>=10) z=a[t/10]+a[t%10];
else z=a[t];
if(x+y+z==n)
{
ans++;
}
}
}
printf("%d",ans);
return 0;
}
这题就不说多了,一共O(2000^2)
一个一个模拟 (^o^)/
不明白,为何放在搜索0.0
讲一下思路。
if(i>=1000) x=a[i/1000]+a[i%10]+a[i%100/10]+a[i%1000/100];
else if(i>=100) x=a[i/100]+a[i%10]+a[i%100/10];
else if(i>=10) x=a[i/10]+a[i%10];
这个是求各个不同情况下的不同数字的和
最后3个x,y,z加起来是N,ans++输出ans。
by HZ