微信事业群
时间:2019/9/10 11:00 ~ 13:30
算法题
1、题目1
对于一棵满二叉排序树深度为K,节点数为 2^K - 1 ;节点值为 1至 (2^K-1)。
给出K和任意三个节点的值,输出包含该三个节点的最小子树的根节点值
样例输入:4 10 15 13
样例输出:12
我的代码实现:
package NormalTest;
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
String dataStr = in.nextLine();
String[] strs = dataStr.split(" ");
int dep = Integer.parseInt(strs[0]);
int[] array = new int[dep-1];
for (int i = 0; i < dep-1; i++) {
array[i] = Integer.parseInt(strs[i+1]);
}
System.out.println(get(dep, array));
}
}
private static int get (int dep, int[] array) {
int cur = (int)Math.pow(2,dep-1);
int result = 0;
for (int i = dep-1; i > 0; i--) {
if (array[0] > cur && array[1] > cur && array[2] > cur)
cur = cur + (int)Math.pow(2, i-1);
else if (array[0] < cur && array[1] < cur && array[2] < cur)
cur = cur - (int)Math.pow(2, i-1);
else
{
result = cur;
break;
}
}
return result;
}
}
2、题目2
回形矩阵是由1开始的自然数顺时针排列成的一个n*n矩阵,n为奇数.
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
要求打印出它的一个子矩阵(m*m),例如在n=5的矩阵里面以起始点 xy( 2,2 ) 打印m = 2的正方形,则输出:
17,18