A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Imp_x 高级黑马   /  2014-8-22 01:00  /  1391 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:打印出杨辉三角形(要求打印出10行如下图)      
           1   
          1   1   
        1   2    1   
      1    3   3    1   
    1    4    6   4    1   
1    5    10   10    5    1   
…………


三角形、空心棱形我会打印,但是这个杨辉三角......中间的数令我捉急,求思路

4 个回复

倒序浏览
中间的数是它上面两个数的和
回复 使用道具 举报
本帖最后由 地狱天堂 于 2014-8-22 03:24 编辑
  1. public class Test4 {

  2.         public static void main(String[] args) {
  3.                 System.out.println("*******从1开始,打印10行********");
  4.                 getNum(1,10);
  5.                 System.out.println("*******从2开始,打印5行*******");
  6.                 getNum(2,5);
  7.         }
  8.         
  9.         //num第一行中间的数字,line=需要打印的行数
  10.         public static void getNum(int num,int line){
  11.                 //定义二维需要多长?根据规律2行需要5个,3行需要7个,就定义个lenths=line*2+1的长度。
  12.                 int lenths=line*2+1;
  13.                 //定义个二维数组记数
  14.                 int[][] in=new int[line][lenths];
  15.                
  16.                 //把数字插入到数组第一行中间。
  17.                 in[0][lenths/2]=num;
  18.                
  19.                 //从第二行开始第n个(不包括第一个和最后一个),等于第一行的(n-1)+(n+1)
  20.                 for (int i = 1;i < line; i++) {
  21.                         for (int j = 1; j <lenths-1; j++) {                                
  22.                                 in[i][j]=in[i-1][j-1]+in[i-1][j+1];
  23.                         }
  24.                 }
  25.                
  26.                 //把数组中的0去除,然后打印
  27.                 StringBuilder str=new StringBuilder();
  28.                 for (int i = 0; i <line; i++) {
  29.                         for (int j = 0; j < lenths; j++) {
  30.                                 if(in[i][j]==0){
  31.                                         str.append(" ");
  32.                                         continue;
  33.                                 }                                
  34.                                 str.append(in[i][j]);                                
  35.                         }
  36.                         str.append("\n");
  37.                 }
  38.                 System.out.println(str.toString());
  39.         }
  40.         
  41. }
复制代码

打印结果:
*******从1开始,打印10行********
          1         
         1 1         
        1 2 1        
       1 3 3 1      
      1 4 6 4 1      
     1 5 10 10 5 1     
    1 6 15 20 15 6 1   
   1 7 21 35 35 21 7 1   
  1 8 28 56 70 56 28 8 1  
1 9 36 84 126 126 84 36 9 1
*******从2开始,打印5行*******
     2     
    2 2   
   2 4 2   
  2 6 6 2  
2 8 12 8 2

回复 使用道具 举报
单线程xia 发表于 2014-8-22 01:10
中间的数是它上面两个数的和

这个我知道= =就是代码没思路敲出来
回复 使用道具 举报
地狱天堂 发表于 2014-8-22 03:13
打印结果:
*******从1开始,打印10行********
          1         

过来膜拜一下大神{:3_64:}学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马