1 2 3 4 5 6 7 8 9 =110 在左边数字之间加入运算符(+、-或不加),使得等式成立
来源:互联网 发布:dwcs6安装 mac 编辑:程序博客网 时间:2024/05/13 01:59
1 2 3 4 5 6 7 8 9 = 110;
请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。请你利用计算机的优势,帮助警察叔叔快速找到所有答案。每个答案占一行。形如:
12+34+56+7-8+9
123+4+5+67-89
……
已知的两个答案可以输出,但不计分。各个答案的前后顺序不重要。
注意:
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。这道题只是考寻路问题而已。我改了一下。把路径也可以打印出来了。
分析:
这道题,只要切入点找准了,就可以很快解出来,我的解法是这样的,这里有9个数字,那么数字与数字之间有八个空,每个空的有三种情况:加号、减号、空,每个空有三种可能,一共有八个空,所以有3^8=6561中可能,这种方法是穷举所有的可能情况,所以个人感觉还可以优化!
编程时候,我用8个整数的整形数组来记录这八个空情况,0代表没有插入,1代表插入”+”号,2代表插入”-“,最后通过该整形数组转换成对应的表达式,再计算其最终结果,如果为110,则输出!
public class oneOneZero { public static void main(String[] args) { int[] result=new int[8]; getResult(0,result); } //使用递归求出3^8种情况 public static void getResult(int index,int[] result){ if(index==8){ showResult(result);//根据数组的取值转换成表达式,且求值,这方法有待改进,写的很乱 return; } //每个空有三种可能,0,1,2 for(int i=0;i<3;i++){ result[index]=i; getResult(index+1,result); result[index]=0; //恢复原来的状态 } } public static void showResult(int[] result){ int sum=0; //默认在第一个数字,即1之前是"+"号,方便编程而已 char operateChar='+'; String[] source=new String[]{"1","2","3","4","5","6","7","8","9"}; //最终的表达式,最好用StringBuilder,在非多线程的情况下,字符串拼接的性能,StringBuilder最好, //当然用StringBuffer或者单纯的String也可以 StringBuilder expression=new StringBuilder(); //用于记录临时的数字,因为参与运算的数字可能是几位的数字,所以也需要拼接 StringBuilder number=new StringBuilder(); //先加入第一个字符,即1 number.append(source[0]); expression.append(source[0]); for(int i=0;i<result.length;i++){ if(result[i]==0){//如果为0,表示数字合并 number.append(source[i+1]); expression.append(source[i+1]); }else if(result[i]==1){ sum=calc(operateChar,sum,number); operateChar='+'; number.append(source[i+1]); expression.append("+").append(source[i+1]); }else if(result[i]==2){ sum=calc(operateChar,sum,number); operateChar='-'; number.append(source[i+1]); expression.append("-").append(source[i+1]); } } sum=calc(operateChar,sum,number); if(sum==110){ System.out.print(expression.toString()+"=110"); System.out.println(); } } public static int calc(char operateChar,int sum,StringBuilder number){ if(operateChar=='+'){ sum+=Integer.parseInt(number.toString()); number.delete(0, number.length()); }else if(operateChar=='-'){ sum-=Integer.parseInt(number.toString()); number.delete(0, number.length()); } return sum; } }
输出结果:
123+4+5+67-89=110 123+4-5-6-7-8+9=110 123-4+5-6-7+8-9=110 123-4-5+6+7-8-9=110 12+34+56+7-8+9=110 12+3+45+67-8-9=110 12-3+4-5+6+7+89=110 1+234-56-78+9=110 1+2+34+5+67-8+9=110 1-2+3+45-6+78-9=110
0 0
- 随笔:1 2 3 4 5 6 7 8 9 =110 在左边数字之间加入运算符(+、-或不加),使得等式成立
- 1 2 3 4 5 6 7 8 9 =110 在左边数字之间加入运算符(+、-或不加),使得等式成立
- 第三题:等式变换 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。 1 2 3 4 5 6 7 8 9 = X
- 输入一个正整数X,在下面的等式1 2 3 4 5 6 7 8 9 = X,左边的数字之间添加+号或者-号,使得等式成立。
- 1 2 3 4 5 6 7 8 9 = 110,在数字间填入加号或者减号(可以不填,但不能填入其它符号)使等式成立。
- 在表达式“123456789=100”左边的适当位置插入运算符“+”、“-”,如何使等式成立?
- 【华为机试题】请在123456789之间添加+号或者-号,也可以什么都不填,使得等式的运算结果等于a。要求程序输出等式成立的个数b。测试用例:a=5时,b=21。
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34–5 + 67–8 + 9 = 100。
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
- 用java编写在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是 100 的程序,并输出所有的可能性。 例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是 100 的程序,并输出所有的可能性。
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- 50. Pow(x, n)
- 初来乍到
- Cocos2d-JS坐标系
- POJ 2186
- 正则表达式
- 1 2 3 4 5 6 7 8 9 =110 在左边数字之间加入运算符(+、-或不加),使得等式成立
- (5) linux中环境变量PATH设置
- 深入理解 Java 虚拟机-Java 代码编译和执行的整个过程
- iOS #include与#import的区别
- Android中的Service 与 Thread 的区别
- 第5周项目1(2) 三角形类锥形
- SharedPreferences
- day(1)
- 协同过滤推荐算法举例