1. 程式人生 > >洛谷【p1149】火柴棒等式(完全遞迴)

洛谷【p1149】火柴棒等式(完全遞迴)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int num[11] = {6,2,5,5,4,5,6,3,7,6},n,ans = 0;
int find3(int x)
{
    if(x == 0)
        return 6;
    int an = 0;
    while(x)
    {
        an += num[x % 10];
        x /= 10;
    }
    return
an; } void find2(int cnt,int a,int x,int k)//第二位數; { if(find3(a + x) == cnt) ans ++; if(k)//避免首位數為0; for(int i = 0;i <= 9;i ++) { if(cnt - num[i] >= 2)//至少還要放1個1; find2(cnt - num[i],a,x * 10 + i,1); } } void find(int cnt,int x,int k)//第一位數;
{ for(int i = 0;i <= 9;i ++) if(n - num[i] >= 2) find2(cnt - num[i],x,i,i); if(k)//避免首位數為0; for(int i = 0;i <= 9;i ++) { if(cnt - num[i] >= 4) find(cnt - num[i],x * 10 + i,1); } } int main() { scanf("%d",&n); n -= 4
;// ‘+’ 和 ‘=’; for(int i = 0;i <= 9;i ++) if(n - num[i] >= 4)//至少還要放2個1; find(n - num[i],i,i); printf("%d",ans); }