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

来源:互联网 发布:西安行知驾校 编辑:程序博客网 时间:2024/05/16 03:42

今天看了一下<啊哈!算法>这本书,书中提到了一个很有意思的算法,使用火柴棒搭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

运行结果

这里写图片描述

0 0