一个小的计算题
来源:互联网 发布:淘宝上买刀具犯法吗 编辑:程序博客网 时间:2024/05/17 03:10
题目:编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
解答:
首先,排除三位数的可能(四位数是肯定不可能的无需证明)
假设有三个筐,里面分别有百位数字,十位数字,个位数字。(先不考虑多位数字的前后链接限制)
因为和为100,其实可以看作是个位数字的计算值,加上10*(十位数字的计算值),加上100*(百位数字的计算值)
所以分别考虑:
个位数字和的情况有:0,10,20,30
十位数字和的情况有:10,0,9,8,7
百位数字和的情况有:0,1
分别对应如下:
因为多位数字的前后链接限制,两个百位数字的差肯定大于2,所以百位数字的筐里面不可能存在数字。此处排除3位数的可能。
基本思路:
前1个值的可能计算值:{1}
前2个值的可能计算值:{1+2,1-2,12}
前n个值的可能计算值
S(n) = S(n-2) +\- ( 10*(n-1)+n )
S(n) = S(n-1) +\- n ;
方法:
for(i ➡1 to 9)
if(n ==1 )
列表A: {1};
if ( n ==2 )
列表B: {1+2 , 1-2 , 12 };
else{
“列表n-2 的每个字符串” + "+\-“ + " (n-1)” + “n”,然后放入列表n
“列表n-1 的每个字符串” + "+\-“ + “ n ” ,然后放入列表n
列表n-2 = 列表n-1;
列表n-1 =列表n;
}
然后把列表n-1转换成计算式计算出来,选择值为100的打印所对应的字符串
列表的操作:全部读取,单个插入,复制
package DataStructures;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import java.util.Iterator;import java.util.LinkedList;import java.util.List;/** * Created by maoyanting on 2017/8/28. */public class My5 { LinkedList<String> A = new LinkedList<String>(); LinkedList<String> B = new LinkedList<String>(); LinkedList<String> temp = new LinkedList<String>(); public void sum() { for (int i = 1; i < 10; i++) { if (i == 1) A.addFirst("1"); else if (i == 2) { B.add("1+2"); B.add("1-2"); B.add("12"); } else { for (String a : A) { temp.add(a + "+" + (i - 1) + i); temp.add(a + "-" + (i - 1) + i); } for (String b : B) { temp.add(b + "+" + i); temp.add(b + "-" + i); } A = B; B = temp; temp = new LinkedList<String>(); } } } static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript"); public static void main(String[] args) { My5 simple = new My5(); simple.sum(); try { for (String c : simple.B) { if (jse.eval(c).equals(100)) System.out.println(c + " = 100"); } } catch (Exception e) { System.out.println("Wrong"); } }}
输出:
12+3+4+5-6-7+89 = 100
12-3-4+5-6+7+89 = 100
1+23-4+5+6+78-9 = 100
1+2+3-4+5+6+78+9 = 100
1+2+34-5+67-8+9 = 100
12+3-4+5+67+8+9 = 100
1+23-4+56+7+8+9 = 100
感想:
这是一个在公众号上看见的题目,说是好的程序员应该在30m内解出这5道题目,前4题还好,但这最后一题,身为小白的我实在能力有限,最终写出来的方法也应该有挺大问题的,从空间和时间上都很大。
阅读全文
0 0
- 一个小的计算题
- 一个简单的计算题
- 一个很有意义的计算题!
- 一个很有意义的计算题!
- 一个很有意义的计算题!
- 一个值得终生铭记的计算题
- 一个值得终生铭记的计算题
- 实现一个简单的数学计算题
- 有意思的计算题
- 简单的计算题
- 树的计算题
- 查找的计算题
- 易语言学习第三十课---一个经典的计算题
- [转载]有趣的计算题
- 一道有意思的计算题
- 一道有趣的计算题
- 操作系统的相关计算题
- 计算题
- 实现hadoop NN的HA自动容灾
- 51nod 1557 两个集合(hash)
- 程序员发展与晋升攻略
- Codeforces 733A Grasshopper And the String
- java静态代理
- 一个小的计算题
- matplotlib学习——设置线条颜色及形状
- Struts2笔记
- Hello Node
- 看得懂的常见排序算法分析(java实现)
- topk问题整理
- 高性能JavaScript---加载和执行
- Spring笔记
- 练习一个简单的学生管理系统,不成熟,但是综合性很强