发表时间:2010-07-21
考的应该还有程序的可拓展性吧。要不然两道题三个小时也太。。。
|
|
发表时间:2010-07-21
sfgrgw 写道 这结果对不
for(int i=102 ;i<329;i++) { String numStr = String.valueOf(i)+String.valueOf(i*2)+String.valueOf(i*3); Set charSet = new HashSet(); for(char ch : numStr.toCharArray()) charSet.add(ch); if(charSet.size() == numStr.toCharArray().length) System.out.println(i+" "+i*2+" "+i*3); } 比较有创意啊。不过题中是没有0的。最小是123 |
|
发表时间:2010-07-21
jiangfeng2007 写道
1.逆波兰表达式 2.代码如下: public static void main(String[] args) { int m = 0; int n = 0; String str = null; for(int i=123;i<345;i++){ m = i*2; n = i*3; str = "" + i + m + n; byte[] b = str.getBytes(); Arrays.sort(b); str = new String(b); if("123456789".equals(str)){ System.out.println(i + ";" + m + ";" + n); } } } 测试结果: 192;384;576 219;438;657 273;546;819 327;654;981
经典,当初我怎么没有想到呢,唉,真后悔!!! |
|
发表时间:2010-07-21
为这篇贴我写一个(当然,不全是因为这个原因)
支持以下几个功能: 1.负数 2.四则运算 3.支持变量 4.自定义函数 public static void main(String[] args) { String exp = "mod(11,3)+2*a*t*t"; try { Node expNode = parse(exp); expNode.setVariable("a", 10); expNode.setVariable("t", 2); if (expNode != null) System.out.println(expNode + "=" + expNode.getValue()); } catch (Exception e) { e.printStackTrace(); } 未经严格测试,不过希望对你有所帮助 地址: http://drift-ice.iteye.com/blog/718592 |
|
发表时间:2010-07-21
beeke 写道 第一题显然是编译原理题
词法分析然后递归下降 当然你如果熟悉javacc antlr会很快 第二题暴力+优化(比如第一个数不可能大于250) 这两道题能在三个小时内做对的不多 第二道题还是暴力破解来的快,第一个数怎么不可能大于250,327就是个例子 |
|
发表时间:2010-07-21
import Data.List main = print $ filter (\a_ -> let a = 100 * head a_ + 10 * (a_ !! 1) + last a_ b = show (2 * a) c = show (3 * a) in length b <= 3 && length c <= 3 && all (\b_ -> b_ `notElem` show a) b && length (nub b) == length b && all (\c_ -> c_ `notElem` show a) c && length (nub c) == length c ) $ nub $ filter ((>=) 3 . head) $ map (take 3) $ permutations $ take 9 [ 1.. ] [ [2,7,3] , [3,2,7] , [2,6,7] , [1,7,6] , [2,3,8] , [1,8,2] , [2,1,8] , [1,7,8] , [2,6,9] , [1,9,2] , [2,1,9]] |
|
发表时间:2010-07-21
第一个好像数据结构的堆栈!
|
|
发表时间:2010-07-21
public void testData(){
HashSet set; for(int i=123;i<333;i++){ set = new HashSet(); int t = i; getPerNum(set, t); int t1 = i*2; getPerNum(set, t1); int t2 = i*3; getPerNum(set, t2); if(set.size()==9&&!set.contains(0)){ System.out.println("i = " + i); } } } private void getPerNum(HashSet set, int t) { while(t>0){ set.add(t%10); t = (t/10); } } |
|
发表时间:2010-07-21
gsJason 写道 考的应该还有程序的可拓展性吧。要不然两道题三个小时也太。。。
第一题,如果没资料,建操作符优先表还是要点时间的. |
|
发表时间:2010-07-22
紫轩侠客 写道
jiangfeng2007 写道
1.逆波兰表达式 2.代码如下: public static void main(String[] args) { int m = 0; int n = 0; String str = null; for(int i=123;i<345;i++){ m = i*2; n = i*3; str = "" + i + m + n; byte[] b = str.getBytes(); Arrays.sort(b); str = new String(b); if("123456789".equals(str)){ System.out.println(i + ";" + m + ";" + n); } } } 测试结果: 192;384;576 219;438;657 273;546;819 327;654;981
经典,当初我怎么没有想到呢,唉,真后悔!!!
public void method_1(){ for (int i = 123; i <=333; i++) { String temp = i+""+(i*2)+""+(i*3); if(method_2(temp)){ System.out.println(i+" "+(i*2)+" "+(i*3)); } } } public boolean method_2(String str){ try { Map<String, Integer> map = new HashMap<String, Integer>(); for (int i = 0; i <= str.length(); i++) { if(map.containsKey(str.charAt(i)+"")){ return false; }else{ map.put(str.charAt(i)+"", i); } } return true; } catch (Exception e) { return true; } } 结果: 192 384 576 219 438 657 267 534 801 273 546 819 327 654 981
|