目描述
给你 n 根火柴棍,你可以拼出多少个形如 A+B=C 的等式?等式中的 A、B、C 是用火柴棍拼出的整数(若该数非零,则最高位不能是 00)。用火柴棍拼数字 0∼90∼9 的拼法如图所示:
注意:
- 加号与等号各自需要两根火柴棍;
- 如果 A=B,则 +B=C 与 B+A=C 视为不同的等式(≥0A,B,C≥0);
- n 根火柴棍必须全部用上。
输入格式
一个整数 (1≤≤24)n(1≤n≤24)。
输出格式
一个整数,能拼成的不同等式的数目。
输入输出样例
输入 #1复制
14
输出 #1复制
2
输入 #2复制
18
输出 #2复制
9
说明/提示
【输入输出样例 1 解释】
22 个等式为 0+1=10+1=1 和 1+0=11+0=1。
【输入输出样例 2 解释】
99 个等式为
0+4=40+4=4、0+11=110+11=11、1+10=111+10=11、2+2=42+2=4、2+7=92+7=9、4+0=44+0=4、7+2=97+2=9、10+1=1110+1=11、11+0=1111+0=11。
noip2008 提高第二题
答案:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=10010;
int arr[N];
int n,res=0;
int q[N]={6,2,5,5,4,5,6,3,7,6};
int col(int x)
{
if(q[x]>0) return q[x];
else{
int sum=0;
while(x)
{
sum+=(q[x%10]);
x/=10;
}
return sum;
}
}
void dfs(int x,int sum)
{
if(sum>n) return;
if(x>3)
{
if(arr[1]+arr[2]==arr[3] && sum==n)
{
res++;
}
return ;
}
for(int i=0;i<=1000;i++)
{
arr[x]=i;
dfs(x+1,sum+col(i));
arr[x]=0;
}
}
int main()
{
scanf("%d",&n);
n-=4;
dfs(1,0);
printf("%d",res);
return 0;
}
标签:11,10,int,sum,NOIP2008,等式,火柴,P1149
From: https://blog.csdn.net/2401_83324189/article/details/137433830