首先确定每个数字所用的火柴棍树木,用一层递归一层循环枚举一次,确定两个加数的值,算出和,进行进行判断,若符合条件则进行记录。
1 #include<cstdio> 2 int need[]={6,2,5,5,4,5,6,3,7,6}; 3 int ans=0;int h=0; 4 int n; 5 int ab[1000]; 6 int cnt(int cur){ 7 int ans=0,ret; 8 if(cur==0) return 6; 9 while(cur>0){ 10 ret=cur%10; 11 ans+= need[ret]; 12 cur/=10; 13 } 14 return ans; 15 } 16 void huo(int i) 17 { 18 int t; 19 if(i>1000){printf("%d\n",ans); 20 for(t=0;t<h;t+=3) 21 printf("%d+%d=%d\n",ab[t],ab[t+1],ab[t+2]); 22 } 23 else {for(t=0;t<=1000;t++) 24 {int a=cnt(i); int b=cnt(t); 25 int d=cnt(i+t); 26 int c=n-4-a-b; 27 if(d==c){ 28 ans++; 29 ab[h]=i; 30 ab[h+1]=t; 31 ab[h+2]=i+t; 32 h=h+3; 33 } 34 35 } 36 37 huo(i+1); 38 } 39 } 40 int main() 41 { 42 43 scanf("%d",&n); 44 huo(0); 45 return 0; 46 }
时间: 2024-10-05 11:43:24