洛谷【p1149】火柴棒等式(完全递归)

来源:互联网 发布:城市轨道交通系统知乎 编辑:程序博客网 时间:2024/05/21 07:09

题目>>https://www.luogu.org/problem/show?pid=1149

#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);}
原创粉丝点击