精华帖 (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 } }; |
|
返回顶楼 | |
发表时间: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的代码 |
|
返回顶楼 | |
发表时间:2011-12-20
yangguo 写道 suntao19830709 写道 这样的题目几年前就玩剩下的了。
这样的话几年前就说剩下了。 这样的话我几年前就没说了...... |
|
返回顶楼 | |
发表时间: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; } |
|
返回顶楼 | |
发表时间:2011-12-20
我貌似没证明,但是
青蛙可以N级跳的算法应该是 f(n) = n + [(n-1)+(n-2)....+ (n-n/2)] + [(n-1) + .......(n-n/3)] + [(n-1) +......] n/2的个数 这样的算法哦() |
|
返回顶楼 | |
发表时间: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 :: _)) } |
|
返回顶楼 | |
发表时间:2011-12-21
送一本书?!给我说不定我都不会看,哎!
|
|
返回顶楼 | |
发表时间:2011-12-25
我也提交了答案,怎么没有见到更新名单?
|
|
返回顶楼 | |
发表时间: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; } |
|
返回顶楼 | |
发表时间: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)); } } |
|
返回顶楼 | |