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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唯我独赞mo 中级黑马   /  2015-11-14 22:31  /  1016 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


需求:打印杨辉三角形(行数可以键盘录入)(笔试中经常出现)
       
        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.         }
复制代码

14 个回复

倒序浏览
我也是 服了 这么难都会
回复 使用道具 举报
sshh11 发表于 2015-11-14 23:02
我也是 服了 这么难都会

可是面试题遇到了,没办法啊
回复 使用道具 举报
编程语言都会练过的一个算法
回复 使用道具 举报
赵存金 来自手机 中级黑马 2015-11-15 16:42:08
报纸
厉害。。。。
回复 使用道具 举报
get and looklook
回复 使用道具 举报
俺之前也是搞java的,不过现在转IOS了,小小的回忆
回复 使用道具 举报
先赞一个,再慢慢分析
回复 使用道具 举报
我自己写的,另外妹子你有男朋友吗?
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();
  }
}
}

回复 使用道具 举报
大神啊;可以复制下来慢慢看
回复 使用道具 举报
攒。。我也想问这么厉害的女孩子有男朋友了么{:2_36:}
回复 使用道具 举报
本帖最后由 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. }
复制代码



回复 使用道具 举报
kunsongjack 发表于 2015-11-17 20:23
恕我直言,数组出现了冗余容量。不要那么随便的就new int[5][5],这浪费了一半容量的堆内存。可以采用循环来 ...

跟我做的一样
回复 使用道具 举报
同问  有男朋友吗?   
回复 使用道具 举报
这个有点6啦,大神求包养!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马