锁定老帖子 主题:深圳两个上机题,求讨论!
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-20
最后修改:2011-04-19
第二个:9个数1-9组成三个数,如:327 654 981,每个数字只能用一次,每三个数字组成一个新的数字,第二个数是第一个数的两倍,第三个数是第一个数的三倍,用程序实现。 我的实现: 第一个:把传进来的字符串解串,用了以个while循环,只要碰到"+","-","*","/"就记录符号的index,计算index两边的值,然后再组成新的字符串返回,当字符串的长度为一的时候,就是最后的值。因为当时时间紧急,考虑的不是很全面。 第二个:用程序实现不了,但总结了三点规律: 1、三个数的百位数必须是倍数关系 如327 654 981 和 219 438 657 百位数分别为3 6 9和2 4 6 2、三个数的十位数必须均值递增,如上十位数为别为2 5 8和1 3 5 3、三个数的个位数必须均值递减,如上个位数分别为7 4 1和9 8 7 请教大家评论及指点! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-07-20
第二个数是第一个数的两倍,第三个数是第一个数的三倍,用程序实现。
何必什么规律呢。。 这么小的数字,直接用穷举就行了。 从100--333,把他们×2,×3.连成一个数字串。判断是否满足,满足就打印,不满足就pass。。 |
|
返回顶楼 | |
发表时间:2010-07-21
最后修改:2010-07-21
1.第一个题目,是否带“()” 如果不带括号,很好办。。我就不多说了
2.乍一看有点难度,想清楚就不男了 9个数1-9组成三个数 第二个数是第一个数的两倍,第三个数是第一个数的三倍 由此可见 第一个数 只能是 321 第二个数 便是 624, 第三个数 936, 。。。不晓得是你描述错误,还是我想错了。。。第二个题目有意义么? |
|
返回顶楼 | |
发表时间:2010-07-21
第一个:
先写一个方法,处理无括号简单表达式的计算结果 先计算简单表达式 的 乘法和除法,然后计算加法减法 再写目标方法,去除所有括号(既利用上面写的这个方法先计算出括号里面的表达式的结果),去除所有括号后即得到简单表达式,再用上面写的方法计算出结果 第二个: 用程序实现不了?先不考虑算法,直接用最笨的办法 1-9的所有排列 ( 1 跟 2-9 换位置,2 跟 3-9换位置,3 跟 4-9 换位置...) 1-9 的所有排列可能 的 遍历 --> 判断 三个数的倍数关系 --> 得到结果 或者, 1-9 遍历 所有 三位数 如 123,然后 得出 123 的 两倍 246 和 三倍 369 , 判断为 false 然后 132, 得出 264 和 396 ,判断为 false, ... 直到 得到 true |
|
返回顶楼 | |
发表时间:2010-07-21
最后修改:2010-07-21
第一个,逆波兰表达式
http://leon-a.iteye.com/blog/186104 第二题,由于java在1秒内运算的数量级大概是10^9,所以纯暴力就可以了 package test; public class Main { String[] nums = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; boolean[] visable = new boolean[] { false, false, false, false, false, false, false, false, false }; public void check() { for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length; j++) { for (int k = 0; k < nums.length; k++) { if (!nums[i].equals(nums[j]) && !nums[i].equals(nums[k]) && !nums[j].equals(nums[k])) { Integer num = new Integer(nums[i] + nums[j] + nums[k]); Integer num2 = num * 2; Integer num3 = num * 3; visable[i] = true; visable[j] = true; visable[k] = true; String str = num2.toString() + num3.toString(); if (str.length() == 6) { if (isUnique(str)) { System.out.println(num + "," + num2 + "," + num3); } } resetVisable(); } } } } } public static void main(String[] args) { Main m = new Main(); m.check(); } public void resetVisable() { for (int i = 0; i < visable.length; i++) { visable[i] = false; } } public boolean isUnique(String str) { String[] strs = str.split(""); for (int i = 1; i < strs.length; i++) { int k = 0; for (int j = 0; j < nums.length; j++) { if (strs[i].equals(nums[j])) { if (!visable[j]) { visable[j] = true; } else { return false; } } else { k++; } } if (k == nums.length) { return false; } } return true; } } |
|
返回顶楼 | |
发表时间:2010-07-21
leon_a 写道 第一个,逆波兰表达式
http://leon-a.iteye.com/blog/186104 第二题,由于java在1秒内运算的数量级大概是10^9,所以纯暴力就可以了 package test; public class Main { String[] nums = new String[] { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; boolean[] visable = new boolean[] { false, false, false, false, false, false, false, false, false }; public void check() { for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length; j++) { for (int k = 0; k < nums.length; k++) { if (!nums[i].equals(nums[j]) && !nums[i].equals(nums[k]) && !nums[j].equals(nums[k])) { Integer num = new Integer(nums[i] + nums[j] + nums[k]); Integer num2 = num * 2; Integer num3 = num * 3; visable[i] = true; visable[j] = true; visable[k] = true; String str = num2.toString() + num3.toString(); if (str.length() == 6) { if (isUnique(str)) { System.out.println(num + "," + num2 + "," + num3); } } resetVisable(); } } } } } public static void main(String[] args) { Main m = new Main(); m.check(); } public void resetVisable() { for (int i = 0; i < visable.length; i++) { visable[i] = false; } } public boolean isUnique(String str) { String[] strs = str.split(""); for (int i = 0; i < strs.length; i++) { for (int j = 0; j < nums.length; j++) { if (strs[i].equals(nums[j])) { if (!visable[j]) { visable[j] = true; } else { return false; } } } } return true; } } 逆波兰表达式,怀念啊,读书的时候根本不知道这个有什么用 |
|
返回顶楼 | |
发表时间:2010-07-21
eval飘过……
|
|
返回顶楼 | |
发表时间:2010-07-21
第一题有很多种方法啊。
1.用jexl 2.用javacc 3.自已解析啊。定义一堆优先级,然后压栈处理咯 |
|
返回顶楼 | |
发表时间:2010-07-21
好像曾经的数据结构考试。。。
|
|
返回顶楼 | |
发表时间:2010-07-21
别纯暴力,起码剪个枝:
最简单限定一下百位就省下不少运行时间了 |
|
返回顶楼 | |