啊哈,算法自学记——5th

用n根火柴拼成A+B=C 的形式;(n<=24)

  • =用两根 +用两根
  • 火柴要全部用完
  • 如果A!=B,则A+B=C和B+A=C是两个等式

分析:
n<=24,"=“和”+"用掉四根,则还剩余20根,1用到的火柴最少,所以,20根火柴的最多只能拼出10个1,A+B=C每一个数都不能超过11111,。

#include <stdio.h>


int fun(int x)
{
    int num=0;//用来计数的变量,火柴的数量
    int f[10]={6,2,5,5,4,5,6,3,7,6};//用一个数组来记录0-9这几个数字所用的火柴数量

    while ((x/10)!=0)//说明这个数不止两位数
    {
        //获得x的个位数并将次数所用到的火柴数加入num中
        num += f[x%10];

        x=x/10;//去掉末尾的数字
    }//此时输入的x 已经是一位数

    num += f[x];

    return num;
    
}


int main(int argc, char const *argv[])
{
    int a,b,c,i,m,sun=0;

    printf("Input the num:
");
    scanf("%d",&m);

    //开始枚举A和B
    for(a=0;a<1111;a++)
    {
        for(b=0;b<1111;b++)
        {
            c=a+b;
            if(fun(a)+fun(b)+fun(c)==m-4)
            {
                printf("%d+%d=%d
",a,b,c);
                sun++;
            }
        }
    }
    printf("total:%d",sun);
    return 0;
}

运行结果:
在这里插入图片描述

原文地址:https://www.cnblogs.com/hhsxy/p/14018430.html