用火柴棒搭A+B=C形式的等式

今天看了一下<啊哈!算法>这本书,书中提到了一个很有意思的算法,使用火柴棒搭A+B=C;等式中A,B,C均用火柴棍拼出来的整数,数值0-9的拼法如下图所示:

这里写图片描述

注意事项:
  1. 加号与等号各自需要两根火柴棍
  2. 如果A<>B,则A+B=C与B+A=C视为不同的等式(A,B,C都大于0)
  3. 所有火柴棒都必须用上。
  4. 假设总数不超过11111

    C#代码如下
#region 算法搭火柴棍
        /// <summary>
        /// 算法搭火柴棍
        /// </summary>
        public void MatchAlgorithm()
        {

            Console.Write("请输入一个数字:");
            int m = Convert.ToInt32(Console.ReadLine());
            int a, b, c, sum = 0;
            for (a = 0; a <= 11111; a++)
            {
                for (b = 0; b < 11111; b++)
                {
                    c = a + b;
                    if (fun(a) + fun(b) + fun(c) == m - 4)
                    {
                        Console.WriteLine("{0}+{1}={2}", a, b, c);
                        sum++;
                    }
                }
            }
            if (sum == 0)
            {
                Console.WriteLine("此数字{0}未找到匹配的等式:",m);
            }

        }
        /// <summary>
        /// 通过数组下标来获取对应的火柴棍数量
        /// </summary>
        /// <param name="x">A,B,C的值</param>
        /// <returns></returns>
        public static int fun(int x)
        {
            int num = 0;
            //f数组下标来对应0,1,2,3,4,5,6,7,8,9;
            //对应的值来对应各个下标所需要的火柴棍
            int[] f = new int[10] { 6, 2, 5, 5, 4, 5, 6, 3, 7, 6 };
            while (x / 10 != 0)
            {
                num += f[x % 10];
                x = x / 10;
            }
            num += f[x];
            return num;
        }
        #endregion
运行结果

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值