中午时候,群里突然有群友发了个面试的上机测试题,看着挺有意思的,其实就是个杨辉三角的变异类型。
下午上班后,开始着手写这个题,连百度带自己测,耗费了两个半小时,也是怪丢人的。
话不多说,先看题,题目很简单,就是输入一个数字,打印出对应的类型:
9:
15:
相信懂的人都能看出来规律了,我刚开始找错方向了,想了有一会儿,后来把效果图拆为两个直角三角形之后就明了了,就是两个杨辉三角合并在一起。
代码如下,未优化:
public static void main(String[] args) {
//输入的数字,只能为奇数
int rows = 15;
//需要显示的行数
int hang = (rows + 1)/2;
//反向+正向
for(int i =rows;i>=1;i--) {
if(i % 2 ==0){
continue;
}
//左半边输出数字
int number = i;
int tmp = (i+1)/2;
number = tmp *(new Double(Math.pow(2, tmp-1)).intValue());
//打印空格
for(int x=0;x<hang-tmp;x++) {
System.out.print(" ");
}
for(int j=tmp;j>0;j--) {
System.out.format("%5d",number);
number = (number +new Double(Math.pow(2, j-1)).intValue())/2 ;
}
//右半边输出数字
int number2 = rows -i + 1;
for(int j=0;j<(rows -i + 2)/2;j++) {
System.out.format("%5d",number2);
number2 = 2 * (number2 -new Double(Math.pow(2, j)).intValue()) ;
}
System.out.println();
}
}