论坛首页 招聘求职论坛

深圳两个上机题,求讨论!

浏览 31621 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-07-25  
感谢各位的耐心解答,这几天太忙了,找个时间好好看看。谢谢各位了!
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间: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


能解释下你的正则表达式是什么意思吗?
0 请登录后投票
   发表时间: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)
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

 

这个看了会才明白,确实犀利

0 请登录后投票
   发表时间: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;
}
}
0 请登录后投票
   发表时间: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();   
     }
    } 
    }
0 请登录后投票
   发表时间:2010-09-19  
逆波兰表达式.... 第一题 不就是大学里的 练习题么。。。
第二题 看了 LS各位的实现 暂时还没想出更优实现。。
0 请登录后投票
   发表时间: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);
	}
}
 
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics