黑马程序员技术交流社区

标题: 杨辉三角形 [打印本页]

作者: 唯我独赞mo    时间: 2015-11-14 22:31
标题: 杨辉三角形

需求:打印杨辉三角形(行数可以键盘录入)(笔试中经常出现)
       
        1
        1 1       
        1 2 1
        1 3 3 1
        1 4 6 4 1
        1 5 10 10 5 1
代码如下:
  1. public static void main(String[] args) {
  2.                 //创建键盘录入对象
  3.                 Scanner sc = new Scanner(System.in);
  4.                
  5.                 //这个n的数据来自于键盘录入。
  6.                 System.out.println("请输入一个数据:");
  7.                 int n = sc.nextInt();
  8.                
  9.                 //定义二维数组
  10.                 int[][] arr = new int[n][n];
  11.                
  12.                 //给这个二维数组任何一行的第一列和最后一列赋值为1
  13.                 for(int x=0; x<arr.length; x++) {
  14.                         arr[x][0] = 1; //任何一行第1列
  15.                         arr[x][x] = 1; //任何一行的最后1列
  16.                 }
  17.                
  18.                 //按照规律给其他元素赋值
  19.                 //从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和。
  20.                 for(int x=2; x<arr.length; x++) {
  21.                         //这里如果y<=x是有个小问题的,就是最后一列的问题
  22.                         //所以这里要减去1
  23.                         //并且y也应该从1开始,因为第一列也是有值了
  24.                         for(int y=1; y<=x-1; y++) {
  25.                                 //每一个数据是它上一行的前一列和它上一行的本列之和。
  26.                                 arr[x][y] = arr[x-1][y-1] + arr[x-1][y];
  27.                         }
  28.                 }
  29.                
  30.                 //这个时候,要注意了,内循环的变化必须和曾经讲过的九九乘法表类似
  31.                 for(int x=0; x<arr.length; x++) {
  32.                         for(int y=0; y<=x; y++) {
  33.                                 System.out.print(arr[x][y]+"\t");
  34.                         }
  35.                         System.out.println();
  36.                 }
  37.         }
复制代码

作者: sshh11    时间: 2015-11-14 23:02
我也是 服了 这么难都会
作者: 唯我独赞mo    时间: 2015-11-15 12:56
sshh11 发表于 2015-11-14 23:02
我也是 服了 这么难都会

可是面试题遇到了,没办法啊
作者: 洛荣神川    时间: 2015-11-15 14:27
编程语言都会练过的一个算法
作者: 赵存金    时间: 2015-11-15 16:42
厉害。。。。
作者: 再续啸傲    时间: 2015-11-15 19:04
get and looklook
作者: 约吗^_^    时间: 2015-11-15 21:23
俺之前也是搞java的,不过现在转IOS了,小小的回忆
作者: pl8236448    时间: 2015-11-15 21:33
先赞一个,再慢慢分析
作者: 1379号监听员    时间: 2015-11-15 21:48
我自己写的,另外妹子你有男朋友吗?
package com.heima.sanjiao;
import java.util.Scanner;
/*
* 杨辉三角
* */
public class Test1 {
public static void main(String[] args) {
  Scanner sc =new Scanner(System.in);
  System.out.println("请输入杨辉三角的行数");
  int n = sc.nextInt();
  int[][] arr =new int [n][n];   //定义二维数组不能int[][] arr =new int [n][]这样会空指针异常
  for (int i = 0; i < arr.length; i++) {
   for (int j = 0; j <= i; j++) {
    if (j == 0 || j == i) {
     arr[i][j] = 1;
    }else {
     arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
    }
   }
  }
  for (int i = 0; i < arr.length; i++) {
   for (int j = 0; j <= i; j++) {   //只输出有数字的元素,其他忽略。
    System.out.print(arr[i][j]+"\t");
   }
   System.out.println();
  }
}
}


作者: 一个人走天下    时间: 2015-11-15 22:07
大神啊;可以复制下来慢慢看
作者: 大耳冬    时间: 2015-11-15 22:46
攒。。我也想问这么厉害的女孩子有男朋友了么{:2_36:}
作者: kunsongjack    时间: 2015-11-17 20:23
本帖最后由 kunsongjack 于 2015-11-17 20:29 编辑

恕我直言,数组出现了冗余容量。不要那么随便的就new int[5][5],这浪费了一半容量的堆内存。可以采用循环来初始化数组。
  1. int a[][] = new int[5][];// 声明二维数组,行数为5
  2. for (int i = 0; i < 5; i++) {// 循环初始化数组
  3. a[i] = new int[i + 1];
  4. }
复制代码




作者: 黑夜中那颗星    时间: 2015-11-17 20:31
kunsongjack 发表于 2015-11-17 20:23
恕我直言,数组出现了冗余容量。不要那么随便的就new int[5][5],这浪费了一半容量的堆内存。可以采用循环来 ...

跟我做的一样
作者: 小笨笨天    时间: 2015-11-17 20:38
同问  有男朋友吗?   
作者: 水尛丶    时间: 2015-11-19 22:13
这个有点6啦,大神求包养!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2