论坛首页 招聘求职论坛

这样的面试题,你会吗?——博文视点杯有奖答题活动

浏览 25576 次
精华帖 (1) :: 良好帖 (0) :: 隐藏帖 (20)
作者 正文
   发表时间:2011-12-19  
fczfr 写道
恩,确实是书买不出去了
public class SndArrayFind {
public static void main(String[] args){
int[][] array = new int[4][4];
array[0][0] = 1;
array[0][1] = 2;
array[0][2] = 8;
array[0][3] = 9;

array[1][0] = 2;
array[1][1] = 4;
array[1][2] = 9;
array[1][3] = 12;

array[2][0] = 4;
array[2][1] = 7;
array[2][2] = 10;
array[2][3] = 13;

array[3][0] = 6;
array[3][1] = 8;
array[3][2] = 11;
array[3][3] = 15;

//未找到的数据
System.out.println(find(array,0));
System.out.println(find(array,5));
System.out.println(find(array,14));
System.out.println(find(array,16));

//已找到的数据
System.out.println(find(array,1));
System.out.println(find(array,7));
System.out.println(find(array,9));
System.out.println(find(array,15));
}

/**按照递增方式查找,递减同理(就不列了)**/
public static boolean find(int[][] array,int findNum){
int column = getFirstRow(array[0],findNum);
if(column==-1){ //表示所有的数都大于findNum
// System.out.println("未找到,行"+0+",列"+column);
return false;
}else if(array[0][column]==findNum){
// System.out.println("已找到,行"+0+",列"+column);
return true;
}else{
return find(array,findNum,1,column);
}
}

public static boolean find(int[][] array,int findNum,int row,int column){
if(row>=array.length){ //没有该列
// System.out.println("未找到,行"+row+",列"+column);
return false;
}
if(column==-1){ //没有该行
// System.out.println("未找到,行"+row+",列"+column);
return false;
}
if(array[row][column]==findNum){ //等于则找到
// System.out.println("已找到,行"+row+",列"+column);
return true;
}else if(array[row][column]>findNum){ //大于往左
return find(array,findNum,row,column-1);
}else{ //小于往下
return find(array,findNum,row+1,column);
}
}

public static int getFirstRow(int[] array,int findNum){
for(int i=0;i<array.length;i++){
int num = array[i];
if(num>findNum){ //如果标识num[i]>findNum则返回i-1;
return i-1;
}
}
return array.length-1;
}
}



你为什么不这样申明呀?

int[][] array = { { 1, 2, 8, 9 }, { 2, 4, 9, 12 }, { 4, 7, 10, 13 }, { 6, 8, 11, 15 } };
0 请登录后投票
   发表时间:2011-12-20   最后修改:2011-12-20
传说中很让人蛋疼的东西,青蛙跳f(1) = 1?

难道f(1) 不是等于2,话说,这个没有限制可以多跳一层的东西,难道不是正确跳法,
我算出来f(1) = 2  f(2) =  2

f(n) = 2 + (n-1) + (n-2)...... (其中中间的系列的个数等于n/2 的个数)

f(n) = 2 + (n-1) + .......(n-n/2)的算法

可以跳N阶就更加麻烦啦,
f(1) = n  f(2)就是一个难算的- -

	int result = 2;
		int n = 4;
		for(int i = 0; i < n && i < ((n%2)+ n) /2; i++){
			result += n - i - 1;
		}
		System.out.println(result);

//青蛙跳1,跳2的代码
0 请登录后投票
   发表时间:2011-12-20  
yangguo 写道
suntao19830709 写道
这样的题目几年前就玩剩下的了。


这样的话几年前就说剩下了。

这样的话我几年前就没说了......
0 请登录后投票
   发表时间:2011-12-20  
第一题
public static boolean arraySearch(int[][]a,int b){
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[0].length; j++) {
if (a[i][j]==b) {
return true;
}
}
}
return false;
}
0 请登录后投票
   发表时间:2011-12-20  
我貌似没证明,但是
青蛙可以N级跳的算法应该是


f(n) =  n + [(n-1)+(n-2)....+ (n-n/2)] + [(n-1) + .......(n-n/3)] + [(n-1) +......]
                 n/2的个数

这样的算法哦()
0 请登录后投票
   发表时间:2011-12-20  
第二个,写个递归在scala的console里玩玩
def ssp(a: Int, b: Int): List[List[Int]] = (a, b) match {
  case (x, 1) => List(List.fill(x)(1))
  case (x, y) if x <= 0 => Nil
  case (x, y) if x < y => ssp(x, x)
  case (x, y) if x >= y => (1 to y).toList flatMap (e => ssp(x-e, y) map (e :: _))
}
0 请登录后投票
   发表时间:2011-12-21  
送一本书?!给我说不定我都不会看,哎!
0 请登录后投票
   发表时间:2011-12-25  
我也提交了答案,怎么没有见到更新名单?
0 请登录后投票
   发表时间:2011-12-28  
	private static boolean searchNumber(int[][] arr, int num) {
		boolean search = false;
		int row = arr.length;
		int line = arr[0].length;
		int maxRow = 0;
		int maxLine = 0;
		for(int i = 0; i < row; i++) {
			maxRow = i + 1;
			if(arr[i][0] == num) {
				return true;
			} else if(arr[i][0] > num) {
				break;
			}
		}
		if(maxRow == 1) {
			return false;
		} 
		for(int i = 0; i < line; i++) {
			maxLine = i + 1;
			if(arr[0][i] == num) {
				return true;
			} else if(arr[0][i] > num) {
				break;
			}
		}
		for(int i = 1; i < maxRow; i++) {
			for(int j = 1; j < maxLine; j++) {
				if(arr[i][j] == num) {
					return true;
				}
			}
		}
		return search;
	}
0 请登录后投票
   发表时间:2011-12-28  
	/*
	 * 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
	 */
	private static int getNumber1(int level) {
		int num = 0;
		if(level > 0 && level <= 3) {
			num = level;
		} else if(level > 3) {
			num = getNumber1(level - 1) + getNumber1(level -2);
		}
		return num;
	}
	
	/*
	 * 一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法? 
	 */
	private static int getNumber2(int level, int levelLeft) {
		int num = 0;
		if(level <= 0) {
			return 0;
		}
		if(levelLeft == 0) {
			num = 1;
		} else if(levelLeft > 0 && levelLeft <= 2) {
			num = levelLeft;
		} else if(levelLeft > 2) {
			for(int i = 1; i <= level; i++) {
				if(levelLeft - i >= 0) {
					num = num + getNumber2(level, levelLeft - i);
				}
			}
		}
		return num;
	}
	
	public static void main(String[] args) {
		for(int i = 0; i <= 6; i++) { //测试0到6级台阶
			System.out.println(i + ":\t" + getNumber1(i) + "\t" + getNumber2(i, i));
		}
	}
0 请登录后投票
论坛首页 招聘求职版

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