锁定老帖子 主题:深圳两个上机题,求讨论!
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-07-25
感谢各位的耐心解答,这几天太忙了,找个时间好好看看。谢谢各位了!
|
|
返回顶楼 | |
发表时间:2010-07-28
第二题:
/** * 分析: * 0、设三个数分别为a、b、c; * 1、由于都是3位数,且b=2a,c=3a,所以a在100到400间 * 2、9个数字不重复,故a最小值为123,最大329(333*3 < 1000) */ private void findD() { int min = 123; int max = 329; Pattern p = Pattern.compile("\\d*(\\d)\\d*\\1|0"); for (int i = min; i < max; i++) { if(!p.matcher("" + i + 2*i + 3*i).find()) { System.out.println("a = " + i + ",b = " + 2*i + ",c = " + 3*i); } } } 测试结果: a = 192,b = 384,c = 576 a = 219,b = 438,c = 657 a = 273,b = 546,c = 819 a = 327,b = 654,c = 981 |
|
返回顶楼 | |
发表时间:2010-07-28
facade 写道 第二题:
/** * 分析: * 0、设三个数分别为a、b、c; * 1、由于都是3位数,且b=2a,c=3a,所以a在100到400间 * 2、9个数字不重复,故a最小值为123,最大329(333*3 < 1000) */ private void findD() { int min = 123; int max = 329; Pattern p = Pattern.compile("\\d*(\\d)\\d*\\1|0"); for (int i = min; i < max; i++) { if(!p.matcher("" + i + 2*i + 3*i).find()) { System.out.println("a = " + i + ",b = " + 2*i + ",c = " + 3*i); } } } 测试结果: a = 192,b = 384,c = 576 a = 219,b = 438,c = 657 a = 273,b = 546,c = 819 a = 327,b = 654,c = 981 能解释下你的正则表达式是什么意思吗? |
|
返回顶楼 | |
发表时间:2010-07-30
yangguo 写道 facade 写道 第二题:
/** * 分析: * 0、设三个数分别为a、b、c; * 1、由于都是3位数,且b=2a,c=3a,所以a在100到400间 * 2、9个数字不重复,故a最小值为123,最大329(333*3 < 1000) */ private void findD() { int min = 123; int max = 329; Pattern p = Pattern.compile("\\d*(\\d)\\d*\\1|0"); for (int i = min; i < max; i++) { if(!p.matcher("" + i + 2*i + 3*i).find()) { System.out.println("a = " + i + ",b = " + 2*i + ",c = " + 3*i); } } } 测试结果: a = 192,b = 384,c = 576 a = 219,b = 438,c = 657 a = 273,b = 546,c = 819 a = 327,b = 654,c = 981 能解释下你的正则表达式是什么意思吗? \\d*(\\d)\\d*\\1(判断是否有重复数字)|0(或含0) |
|
返回顶楼 | |
发表时间:2010-08-17
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-08-17
第二题:我也想到一个方法 和诸位交流一下
public class test { public static void main(String args[]){ for(int i=123;i<333;i++) { if(isIndeferentNum(i)&&isIndeferentNum(2*i)&&isIndeferentNum(3*i)){ if(isIndeferent(i,2*i)&&isIndeferent(i,3*i)&&isIndeferent(2*i,3*i)){ System.out.println(i+" "+ 2*i+" "+ 3*i); } } } } /** * 判断是否为数字不同的三位数 * 个位数 十位数 百位数各不相同且不能有0 */ public static boolean isIndeferentNum(int num){ int hun=num/100; int ten=num%100/10; int dec=num%10; if(hun!=ten&&hun!=dec&&ten!=dec&&hun!=0&&ten!=0&&dec!=0) return true; else return false; } /** * 判断两个三位数的数位是否有相同的 * 个位数 十位数 百位数各不相同 */ public static boolean isIndeferent(int num1,int num2){ int hun1=num1/100; int ten1=num1%100/10; int dec1=num1%10; int hun2=num2/100; int ten2=num2%100/10; int dec2=num2%10; if(hun1!=hun2&&hun1!=ten2&&hun1!=dec2){ if(ten1!=hun2&&ten1!=ten2&&ten1!=dec2) if(dec1!=hun2&&dec1!=ten2&&dec1!=dec2) return true; } return false; } } |
|
返回顶楼 | |
发表时间:2010-08-21
关于第二道题我又想到一个方法,如下:
public static void main(String[] args) { HashSet hs=new HashSet(); for(int i=123;i<333;i++){ int hundred1=i/100,hundred2=2*i/100,hundred3=3*i/100; int ten1=i%100/10,ten2=2*i%100/10,ten3=3*i%100/10; int dec1=i%10,dec2=2*i%10,dec3=3*i%10; if(ten1!=0&&ten2!=0&&ten3!=0&&dec1!=0&&dec2!=0&&dec3!=0) { hs.add(hundred1); hs.add(hundred2); hs.add(hundred3); hs.add(ten1); hs.add(ten2); hs.add(ten3); hs.add(dec1); hs.add(dec2); hs.add(dec3); if(hs.size()==9) System.out.println(i+" "+ 2*i+" "+ 3*i); hs.clear(); } } } |
|
返回顶楼 | |
发表时间:2010-09-19
逆波兰表达式.... 第一题 不就是大学里的 练习题么。。。
第二题 看了 LS各位的实现 暂时还没想出更优实现。。 |
|
返回顶楼 | |
发表时间:2010-10-07
应该考得是递归全排列吧 package com.ll.test; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class T1 { /** * @param args */ public static void main(String[] args) { List<Integer> l = new ArrayList<Integer>(); l.add(1); l.add(2); l.add(3); l.add(4); l.add(5); l.add(6); l.add(7); l.add(8); l.add(9); List<Integer> t = new ArrayList<Integer>(); T1 a = new T1(); a.fullPermutation(l, t); } public void fullPermutation(List<Integer> list, List<Integer> temp) { if (temp.size() == 9) { checkNumList(temp); return; } for (int i = 0; i < list.size(); i++) { List<Integer> newlist = new LinkedList<Integer>(list); List<Integer> newTemp = new LinkedList<Integer>(temp); newTemp.add(newlist.get(i)); newlist.remove(i); fullPermutation(newlist, newTemp); } } public void checkNumList(List<Integer> temp) { int n1 = new Integer(temp.get(0) + "" + temp.get(1) + "" + temp.get(2)); int n2 = new Integer(temp.get(3) + "" + temp.get(4) + "" + temp.get(5)); int n3 = new Integer(temp.get(6) + "" + temp.get(7) + "" + temp.get(8)); if (n1 == n3 * 3 && n2 == n3 * 2) System.out.println(n1 + " " + n2 + " " + n3); } } |
|
返回顶楼 | |
发表时间:2010-10-07
wgy_superpower 写道
紫轩侠客 写道
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
没有零,这组是错的 267 534 801 |
|
返回顶楼 | |