输出杨辉三角以及输出金字塔!

我们在编程练习初始阶段总会碰到这样的算法题,输出一个怎样怎样的图形,达到什么样的效果,其实这样的题都会有一个固定的思想。

首先要发现其中隐藏的规律,既然是输出图形,怎么摆放一定是有规律的,要不然各种乱,一点规律没有,这样的题就一点意义都没有了。所以拿到这种算法题,不是拿过来就敲代码,要根据观察得来的规律,脑中大致要有一个思路,第一步实现什么,第二步实现什么,这是很重要的,同时这也是很多初学者编程时候最容易犯的错误!             

下面我们用杨辉三角形和金字塔来进行举例:

  •    杨辉三角形


    • 1 1 
      1 2 1 
      1 3 3 1 
      1 4 6 4 1 
      1 5 10 10 5 1 
    • 大家可以自己画一下观察一下规律(有人问为啥不是等腰三角形形状?那个输出的时候控制一下就好了!)
    • 首先,最明显的是最外层全是1;
    • 之后呢,从第三行开始每一个数是上一行本列和前一列的的数之和,不过此时要注意就是第一列和最后一列除外。
    • 此时,大家再观察一下,还有没有其它的规律呢?
    • 没有的话,此时还不是直接敲代码哦,别心急,想一下如何是实现?这对初学者尤为重要,思路清晰事半功倍!
    • 编程开始的第一步,你一定是要把最外层的1放进去的,因为这是最明显的。那么放在哪里?观察这个杨辉三角,每个数其实就像在一个棋盘上面,每个都对齐着,有行有列,那我们就可以用一个二维数组来存储每个数据。
    • 第二步:此时最外层1放进去了,便可以实现第二哥规律了:从第三行开始每一个数是上一行本列和前一列的的数之和,此时数组正好可以用下标来表示行和列。
    • 第二步完成时,规律实现完,也就是把所有数按照规律放在了里面。
    • 最后一步,打印输出。
import  java.util.Scanner;
public class c {
   public static void main(String[] args)  {
      System.out.println("请输入所要显示杨辉三角的行数:");
      Scanner  in = new Scanner(System.in);
      int  Line = Integer.parseInt(in.nextLine());
      int[][] arr = new  int[Line][Line];
      for(int i = 0; i < arr.length; i++){
          arr[i][0] = 1;
          arr[i][i] = 1;
      }
      for(int i = 2; i < arr.length; i++){
          for(int j = 1; j <= i-1 ; j++){
             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]+" ");
          }
          System.out.println();        
      }



   }

}

  • 金字塔

    • 《输出杨辉三角以及输出金字塔!》(我是直接截取的图片,大家可以画一下,这样有助于大家了解这道题。)
    • 大家先画一下这个三角形金子塔,根据上面的杨辉三角,来做一下道图形输出题。
    • 同样,首先第一步不是直接敲代码,而是找出隐藏规律!
    • 第一步,观察出最明显的,也就是星号了吧。继续观察每一行的星号,此时相信你已经不难发现星号与行数的关系!恭喜你,第一个规律就找到了。
    • 第二步,整个金字塔除了这些还有啥?没啥了啊,是不是?不是的,那不还有空格嘛?要不然你怎么将星号放在中间的位置啊?继续观察每一行的空格,此时你就不难发现空格和行数的关系!
    • 此时整个金字塔分析完毕,整理可得:
      • 空格:等于行数减一  
      • 星号:等于2倍行数减一
    • 此时还不是直接敲代码哦,别心急,想一下如何是实现?
    • 很明显,输出的时候一定是先输出空格,之后再输出星号,对吧,要不然怎么可能让星号直接放到中间。
    • 输出空格,星号之后第一行就结束了,第二行同样,第三行也同样……不知道你有没有感觉但,如此有规律我们是不是就可以想到用了循环啦。一定是先限制行数,再限制空格,最后再限制星号!
    • 想到这,就可以行动啦!
  • import  java.util.Scanner;
    
    public class ptOne {
       public static void main(String[] args) {
          System.out.println("请输入要打印的金字塔行号:");
          Scanner  in = new  Scanner(System.in);
          int Line = in.nextInt();
          for(int i = 1;i <= Line; i++){   // 控制行数
              //先输出空格
              for(int j = 0; j < Line-i;j++){ //控制空格
                 System.out.print(" ");
              }
              //在输出星号
              for(int t = 0; t < 2*i-1; t++){ //控制星号 
                 System.out.print("*");
              }
              System.out.    }
                System.out.println();
            }
    
        }
    }
    
    

    到这,你是不是已经明白了呢?不妨自己编一下倒三角和菱形来检测一下自己吧!!要记住:一定要多敲代码,而不是看懂了就ok了哦!

    //倒三角
    
    import  java.util.Scanner;
    public class b {
        public static void main(String[] args) {
            System.out.println("请输入要打印的金字塔行号:");
            Scanner  in = new  Scanner(System.in);
            int Line = in.nextInt();
            //行数
            for(int i = Line; i > 0; i--){
                for(int j = 0; j < Line - i ;j++){
                    System.out.print(" ");
                }
                for(int t = 0;t <2*i-1;t++){
                    System.out.print("*");
                }
                System.out.println();
            }
    
        }
    }
    
    //菱形
    import  java.util.Scanner;
    public class b {
        public static void main(String[] args) {
            System.out.println("请输入要打印的金字塔行号:");
            Scanner  in = new  Scanner(System.in);
            int Line = in.nextInt();
            for(int i = 1;i <= Line; i++){
                for(int j = 0; j < Line-i;j++){
                    System.out.print(" ");
                }
                for(int t = 0; t < 2*i-1; t++){
                    System.out.print("*");
                }
                System.out.println(" ");
            }
            //行数
            for(int i = Line; i > 0; i--){
                for(int j = 0; j < Line - i ;j++){
                    System.out.print(" ");
                }
                for(int t = 0;t <2*i-1;t++){
                    System.out.print("*");
    
    
    }
                System.out.println();
            }
    
        }
    }
    
    

     

    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/qq_36657788/article/details/82821118
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞