闲来无事,发现2010年面试自己写的程序,贴出来留作记忆
这两天,看到身边的两个室友失败而归,问问得知,公司出了一个杨辉三角的上机题,一个半小时,可以上网查。都失败了!其实算法不难,就是不会,也可以上网查一下,最关键的是要对齐,输出的每个数都要整整齐齐,这个网上可搜不到,呵呵,网上有算法,可都没有对齐的。我用了三个小时整理了一份,呵呵,可能以后你也会碰到哦,看看吧。
public class YangHui {
public static void main(String[] args) {
YangHui.printYH(20);
}
public static void printYH(int row){
String num_max = "";
String value = "";
int[][] a = new int[row][row]; //声明一个二维数组,存储杨辉三角
for(int i=0;i<row;i++){
if(i==0){ //三角顶点时数字1
a[0][0] = 1;
}
else{ //三角两边也是数字1
a[i][0] = 1;
a[i][i] = 1;
}
}
for(int i=1;i<row;i++){ //去除两边,杨辉三角,就是下面的数是自己上面两个数的和,自己最好画个图
for(int j=1;j<i;j++){
a[i][j] = a[i-1][j-1]+a[i-1][j];
}
}
num_max = String.valueOf(a[row-1][row/2]);
for(int m=0;m<num_max.length();m++)
value += " "; //根据最大数字的长度计算,空格的单位
for(int i=0;i<row;i++){
for(int n=0;n<=row-i;n++) //打印数据距左边的距离
System.out.print(value+" ");
for(int j=0;j<=i;j++){
String min=""; //当数字长度大于1,重新计算空格数目
int num_len = String.valueOf(a[i][j]).length(); //得到输出的数字长度
if(num_len>1){ //当数字长度大于1位时,输出空格数要减去自身的长度,这样才能对其
for(int v=0;v<=(num_max.length()-num_len);v++){
min += " ";
}
System.out.print(a[i][j]+value+min+" ");
}
else{ //数字位数为1位时输出
System.out.print(a[i][j]+value+value+" ");
}
}
System.out.println(); //换行
}
}
}