用火柴棒搭A+B=C形式的等式
来源:互联网 发布:西安行知驾校 编辑:程序博客网 时间:2024/05/16 03:42
今天看了一下<啊哈!算法>这本书,书中提到了一个很有意思的算法,使用火柴棒搭A+B=C;等式中A,B,C均用火柴棍拼出来的整数,数值0-9的拼法如下图所示:
注意事项:
- 加号与等号各自需要两根火柴棍
- 如果A<>B,则A+B=C与B+A=C视为不同的等式(A,B,C都大于0)
- 所有火柴棒都必须用上。
假设总数不超过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
- 用火柴棒搭A+B=C形式的等式
- [NOIP2008]火柴棒等式
- 1766. 火柴棒等式
- [NOIP2008] 火柴棒等式
- 火柴棒等式
- 1106: 火柴棒等式
- noip 火柴棒等式
- P1012火柴棒等式
- NOIP2008 火柴棒等式
- noip2008火柴棒等式
- 火柴棒等式
- NOIP2008 火柴棒等式
- openjudge 火柴棒等式
- 火柴棒等式
- [NOIP2008] 火柴棒等式
- NOIP2008 火柴棒等式
- POJ8466火柴棒等式
- 火柴棒等式
- 开启YII2折腾之路:玩弄
- 广告CTR:Decision tree + LR 混合模型
- 回忆,回忆过去
- 三木秉凤
- ToolBar和SearchView的使用总结
- 用火柴棒搭A+B=C形式的等式
- CCF201612试题
- Leetcode 1.Two Sum
- DigitalOcean免费申请VPS/搭建专属VPN服务器
- 重拾java基础(十七):多线程上总结
- Fetch API
- 双向循环链表排列字母表go实现
- JVM进阶(五)——JAVA GC之标记
- Web基础架构:负载均衡和LVS