首页 > 代码库 > 蓝桥杯 算法训练 ALGO-145 4-1打印下述图形

蓝桥杯 算法训练 ALGO-145 4-1打印下述图形

 算法训练 4-1打印下述图形  
时间限制:1.0s   内存限制:256.0MB
问题描述
  使用循环结构打印下述图形,打印行数n由用户输入。打印空格时使用"%s"格式,向printf函数传递只包含一个或多个空格的字符串" ",下同。
技术分享
样例输入
一个满足题目要求的输入范例。
例:

5
样例输出
与上面的样例输入对应的输出。
例:
技术分享
数据规模和约定
  输入数据中每一个数的范围。
  例:0<n<20。
 
题目解析:
  本道题共两种思路,由于 n 的范围很小(0 < n <20),所以两种思路就运行时间、占用内存和复杂度并无优劣之分。
  (1)用循环语句分别控制行、每行开始的空格和每行的 *。
    比如,n = 3
          技术分享  
          技术分享
                表 1.1
    利用 i ( i 从 1 开始)来控制行,因此可以推出空格数 space 与 行数 n 和控制行变量 i 的关系: space = n - i ,* 数 asterisk 与控制行变量 i 的关系: asterisk = 2 * i - 1。
 
    (2)将图形存放在 String 类型的数组中,数组初始化为空。如图 1.1 所示,找出中心列号 center = n - 1,每 i 行都是在中心列的左右两边加 i 个 *,最后将数组输出即可。

 

示例代码1:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner sc = new Scanner(System.in);
 6         int n = sc.nextInt();
 7         
 8         for(int i = 1; i <= n; i++){                //控制行
 9             for(int space = n-i ; space >= 1; space--){            //控制每行前边的空格
10                 System.out.print(" ");
11             }
12             for(int asterisk = 1 ; asterisk <= 2 * i - 1; asterisk++){    //控制每行的 * 
13                 System.out.print("*");
14             }
15             System.out.println();
16         }
17     }
18 }

 

示例代码2:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4 
 5     public static void main(String[] args) {
 6         Scanner sc = new Scanner(System.in);
 7         int n = sc.nextInt();
 8         
 9         String[][] triangle = new String[n][2*n-1];    //创建一个数组,初始化为空
10         for(int i = 0; i < n; i++) {
11             for(int j = 0; j < 2*n-1; j++) {
12                 triangle[i][j] = " ";
13             }
14         }
15         
16         int center = n-1;    //中心列号
17         for(int i = 0; i < n; i++) {        //控制行
18             for(int j = 0; j <= i ; j++) {    //每行在中心左右两边增加 i 个 *
19                 triangle[i][center-j] = "*";
20                 triangle[i][center+j] = "*";
21             }
22         }
23         //输出图形
24         for(int i = 0; i < n; i++) {
25             for(int j = 0; j < 2*n-1; j++) {
26                 System.out.print(triangle[i][j]);
27             }
28             System.out.print("\n");
29         }
30     }
31 }

   

蓝桥杯 算法训练 ALGO-145 4-1打印下述图形