1
1 2 1
1 3 3 1
1 4 6 4 1
'''
关于输出杨辉三角的前10行 问题,拜托哪个高手给编个代码来
发到邮箱或是直接发到这上
解决方案 »
- 求助tomcat报错java.sql.SQLException: ORA-00942: 表或视图不存在
- 公交一卡通的原理是什么啊?可以用java来实现吗?
- Java String类怎么查找替换啊,用通配符
- Linux底下是怎么执行的?
- 判断一个字符串是不是另外一个字符串的一部分用indexOf()托不妥当?
- 快救救我!classpath的设置的问题!
- applet读取数据库急救!!
- ~~~ 变量类型转换问题,送分问题,急用! ~~~
- 菜鸟问题:这个程序编译不能通过。
- 请问学JAVA该从何入手啊?我学过VB,VFP,还学过一点点C,听说招工要学JAVA,所以想学,请前辈给小弟指条路吧?
- 关于java获取操作系统路径的问题
- C/S聊天程序客户端,服务器的IP问题
int[][] a = new int[10][10];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j <= i; j++) {
a[i][j] = j == 0 ? 1 : a[i-1][j-1] + a[i-1][j];
System.out.print (a[i][j] + " ");
}
System.out.println ();
}
}
public class Triangle {
/* a:第K行第一个数的下标值
* m:第K+1行第一个数的下标值
* b:第K行最后一个数的下标值
* n:第K+1行最后一个数的下标值
*
* 规律为除两侧的元素均为1以外,其余每个位置上数值都等于其左上角元素与右上角元素之和
* 第K行有K个数
* array[m+1]=array[a]+array[a+1];
* array[m+2]=array[a+1]+array[a+2];
* 即:
* array[m+t+1]=array[a+t]+array[a+t+1];
* t从零开始,t应该小于等于K-2(保证a+k-2+1=b);
*
*
* 由题已知:
* array[a]=1;
* array[b]=1;
* array[m]=1;
* array[n]=1;
* b-a=k-1;
* m=b+1;
* n-m=k;
*/
//int k;//行号
//List list = new ArrayList((k+1)*k/2);//初始化大小
public final static String SEPARATOR=" ";
public final static String SEPARATOR_NUM=" ";
public final static int LEN=6;
public final static int SEPARATOR_LEN=3;
public StringBuffer init(int k){
int a,b,m,n;//下标
int arr[] = new int[(k+1)*k/2];//初始化大小
StringBuffer sb = new StringBuffer();
//打印第一行
if(k>0){
sb.append(numSeparator(k).toString());
sb.append(toStr(1,LEN));//此行第一个数
}
for(int L=1;L<k;L++){//行号循环
a = ((L-1)+1)*(L-1)/2;//第l行的第一个数的下标值
b = a+L-1;
m = b+1;
n = m+L;
arr[a]=1;
arr[b]=1;
arr[m]=1;
arr[n]=1;
sb.append("\n");//新启一行
//距离最左边占位符
sb.append(numSeparator(k-L).toString());
sb.append(toStr(arr[m],LEN)+separatorStr());//此行第一个数
for(int t=0;t<=L-2;t++){//计算中间的值
arr[m+t+1]=arr[a+t]+arr[a+t+1];
sb.append(toStr(arr[m+t+1],LEN)+separatorStr());
}
sb.append(toStr(arr[n],LEN));//此行最后一个数
}
return sb;
}
/**
* 设定数字的长度为len
* 不足长度的以空格补齐
* @param x
* @param len
* @return
*/
public String toStr(int x,int len){
StringBuffer sb = new StringBuffer("");
String str = String.valueOf(x);
if(str.length()<len){
int i = len-str.length();
for(int k=0;k<i/2;k++){
sb.append(Triangle.SEPARATOR_NUM);
}
sb.append(str);
for(int k=i/2;k<i;k++){
sb.append(Triangle.SEPARATOR_NUM);
}
}else{
sb.append(str);
}
return sb.toString();
}
/**
* //两个数字之间占位符长度的一半
* @return
*/
public String separatorStr(){
StringBuffer sb = new StringBuffer("");
for(int p=0;p<SEPARATOR_LEN;p++){//两个数字之间占位符长度的一半
sb.append(SEPARATOR);
}
return sb.toString();
}
/**
* (总行数-行数序号(从一开始))*两个数字之间占位长度/2
* k行距离左边的占位符数
* @param k
* @return
*/
public String numSeparator(int k){
StringBuffer sb = new StringBuffer("");
for(int j=0;j<k-1;j++){
for(int p=0;p<SEPARATOR_LEN/2;p++){//两个数字之间占位符长度的一半
sb.append(SEPARATOR);
}
for(int p=0;p<=LEN/2;p++){//预设数字本身长度的一半
sb.append(SEPARATOR_NUM);
}
}
return sb.toString();
}
public static void main(String[] arr){
int k=20;
if(arr.length>=1){
try{
k=Integer.parseInt(arr[0]);
}catch(NumberFormatException e){
System.out.print(e.getMessage());
}
}
Triangle t = new Triangle();
System.out.print(t.init(k).toString());
}
}