首页 > 代码库 > 火柴棍等式问题

火柴棍等式问题

火柴棍等式问题

首先确定每个数字所用的火柴棍树木,用一层递归一层循环枚举一次,确定两个加数的值,算出和,进行进行判断,若符合条件则进行记录。

 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 }

 

火柴棍等式问题