本文主要是介绍[NOIP2008 提高组] 火柴棒等式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
[NOIP2008 提高组] 火柴棒等式
题目描述
给你 $n$ 根火柴棍,你可以拼出多少个形如 $A+B=C$ 的等式?等式中的 $A$、$B$、$C$ 是用火柴棍拼出的整数(若该数非零,则最高位不能是 $0$)。用火柴棍拼数字 $0\sim9$ 的拼法如图所示:
注意:
-
加号与等号各自需要两根火柴棍;
-
如果 $A\neq B$,则 $A+B=C$ 与 $B+A=C$ 视为不同的等式($A,B,C\geq0$);
-
$n$ 根火柴棍必须全部用上。
输入格式
一个整数 $n(1 \leq n\leq 24)$。
输出格式
一个整数,能拼成的不同等式的数目。
样例 #1
样例输入 #1
14
样例输出 #1
2
样例 #2
样例输入 #2
18
样例输出 #2
9
提示
【输入输出样例 1 解释】
$2$ 个等式为 $0+1=1$ 和 $1+0=1$。
【输入输出样例 2 解释】
$9$ 个等式为
$0+4=4$、$0+11=11$、$1+10=11$、$2+2=4$、$2+7=9$、$4+0=4$、$7+2=9$、$10+1=11$、$11+0=11$。
#include<stdio.h>
int main(){int a[2001]={6},b,c[10]={6,2,5,5,4,5,6,3,7,6},s=0,i,j;scanf("%d",&b);for(i=1;i<=2000;i++){j=i;while(j>=i){a[i]=c[i/10]+c[j%10];if(i/10==0){a[i]-=6;}j=j/10;}}for(i=0;i<=100;i++){for(j=0;j<=100;j++)if(a[i]+a[j]+a[i+j]+4==b){s++;}}printf("%d",s);return 0;
}
这篇关于[NOIP2008 提高组] 火柴棒等式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!