日期:2014-05-20  浏览次数:20755 次

求高手来改造
class YangHui
{
public static void main(String[] args)
{
int row=10;
int yh[][]=new int[row][row];
for(int x=0;x<row;x++)
{
yh[x][0]=1;
if(x==0)
{
System.out.println(yh[x][0]+"\t");
}
else
{
System.out.print(yh[x][0]+"\t");
}
if(x>=1)
{
for(int i=x;i<=x;i++)
{
for(int j=1;j<row;j++)
{
yh[i][j]=yh[i-1][j-1]+yh[i-1][j];

if(yh[i][j]==0)
{
System.out.print(" ");
}
else
{
System.out.print(yh[i][j]+"\t");
}
}
}
System.out.println("");
}
}
}
}


我想打印出那种三角形的杨辉三角 那种得比较正规一点 求高手帮忙改一下。。。

------解决方案--------------------
Java code

 public class StartG {
   public static void main(String [] args)
   {
       int i=0;
       int j=0;
       for(i=1;i<=4;i++)
       {   for(j=1;j<=2*i-1;j++)
               System.out.print("*");
            System.out.println("");    
       }
       for(i=4;i>=1;i--)
       { for(j=1;j<=2*i-3;j++)
               System.out.print("*");
                System.out.println("");    
       }
   }
 }

------解决方案--------------------
原来在 CSDN 回复的,可以参考一下。

Java code
public class Yanghui {

    public static void main(String[] args) {
        Yanghui yang = new Yanghui();
        yang.printYanghuiTriangle(13);
    }

    /**
     * 生成指定行数的杨辉三角形
      *
     * @param lines 杨辉三角形的行数
      */
    public void printYanghuiTriangle(int lines) {
        if(lines < 1) {
            throw new IllegalArgumentException("lines must be great than 0.");
        }
        if(lines > 30) {
            throw new IllegalArgumentException("lines is too big.");
        }
        int[] line = new int[lines];
        int maxLen = getMaxLen(lines);
        for(int i = 0; i < lines; i++) {
            line[0] = line[i] = 1;
            for(int j = 1, k = i / 2, pre = line[0]; j <= k; j++) {
                int cur = line[j];
                line[i - j] = line[j] += pre;
                pre = cur;
            }
            printLine(line, i + 1, maxLen);
        }
    }

    /**
     * 根据指定行数的杨辉三角形,利用二项式定理计算其中最大数字的长度
      * @param lines 杨辉三角形的行数
      * @return      最大数字的长度
      */
    private int getMaxLen(int lines) {
        int k = lines / 2;
        long maxNum = factorial(k + 1, lines - 1) / factorial(1, lines - 1 - k);
        return getLength(maxNum);
    }

    /**
     * 阶乘计算
      * @param start 阶乘计算的起始数字
      * @param num   阶乘计算的终止数字
      * @return      阶乘计算结果
      */
    private long factorial(int start, int num) {
        long result = start > 0 ? start : 1L;
        while(num > start) {
            result *= num--;
        }
        return result;
    }

    /**
     * 根据指定数字计算数字的长度
      * @param num   数字
      * @return      数字的长度
      */
    private int getLength(long num) {
        int len = 0;
        while(num > 0L) {
            num /= 10L;
            len++;
        }
        return len;
    }

    private void printLine(int[] yanghui, int line, int width) {
        printSpaces((yanghui.length - line) * width);

        for(int i = 0; i < line; i++) {
            if(i > 0) {
                printSpaces(width);
            }
            printSpaces(width - getLength(yanghui[i]));
            System.out.print(yanghui[i]);
        }
        System.out.println();
        if(width > 1) {
            System.out.println();
        }
    }

    private void printSpaces(int spaceCount) {
        for(int i = 0; i < spaceCount; i++) {
            System.out.print(" ");
        }
    }
}