火柴棒等式

来源:互联网 发布:智通方达 软件多少钱 编辑:程序博客网 时间:2024/05/18 09:20

【问题描述】
给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:

比如,14根火柴棒可以拼出2个不同的等式:1+0=1和0+1=1。

         18根火柴棒可以拼出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。



注意:
1. 加号与等号各自需要两根火柴棍
2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)
3. n根火柴棍必须全部用上
【思考过程】

首先要满足A+B=C,这个前提条件;

然后我们还需要做的就是用一个子函数来计算A,B,C的火柴棒个数;

我们会想到用枚举的方法来计算,那么枚举的范围呢?24根火柴棒,任意一个数字都不会超过11111,你们想想是不是这个道理呢?

那么下面我们就来看一下程序是怎样完成的吧

#include<stdio.h>
int fun(int m)
{
int a[10]={6,2,5,5,4,5,6,3,7,6};// 表示一个数字需要的火柴棒的个数 
int num=0;
  while(m>=10)

{num=num+a[m%10];

 m=m/10;
 }
num=num+a[m];
return num;
}
int main()
{
int n,sum=0;
int a,b,c;
scanf("%d",&n);//n表示输入火柴棒的个数 
for(a=0;a<=11111;a++)
for(b=0;b<=11111;b++)
{
c=a+b;
if(fun(a)+fun(b)+fun(c)==n-4) 
{
printf("%d+%d=%d\n",a,b,c);
sum++;
}
}
printf("一共可以输出%d个不同的等式",sum);

}
 注意红色的while语句的意义,能不能用if来代替呢,在一开始的时候,我就用的是if语句,其实if和while语句还是有很大的区别的。下面我们就来说说两语句的区别和联系;

if(  ),括号里的内容和while( )里的内容都是判定句,判定为真则执行语句,假则不执行语句,不同点就是if没有循环的性子,一旦执行过后就跳出语句,而while判定为真后执行它下面的语句,执行完后返回括号里继续判定,判定为真继续执行语句知道括号里判定为假为止

0 0