利用循环语句输出下列图形

题目一:

  1. #
  2. ##
  3. ###
  4. ####
  5. #####

由于有些题目循环变量从0开始,有些是从1开始,所以每个图形都用变量从0和从1开始的代码都发上来了,注意临界值的区别

// 循环变量从0开始
public static void f1() {
    int n = 5;
    for(int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) 
            System.out.print("#");
        System.out.println();
    }
}
// 循环变量从1开始
public static void f2() {
    int n = 5;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) 
            System.out.print("#");
        System.out.println();
    }
}

题目二:

#####
####
###
##
#
// 循环变量从0开始
public static void f1() {
    int n = 5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= n - 1 - i; j++) 
            System.out.print("#");
        System.out.println();
    }
}

// 循环变量从1开始
public static void f2() {
    int n = 5;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n + 1 - i; j++) 
            System.out.print("#");
        System.out.println();
    }
}

题目三:

#####
 ####
  ###
   ##
    #
// 循环变量从0开始
public static void f1() {
    int n = 5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            System.out.print(" ");
        for (int j = i; j < n;j++) 
            System.out.print("#");
        System.out.println();
    }
}

// 循环变量从1开始
public static void f2() {
    int n = 5;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < i; j++) 
            System.out.print(" ");
        for (int j = i; j <= n;j++) 
            System.out.print("#");
        System.out.println();
    }
}

题目四:

    #
   ##
  ###
 ####
#####
// 循环变量从0开始
public static void f1() {
    int n = 5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n - 1 - i; j++)
            System.out.print(" ");
        for (int j = n - 1 - i; j < n; j++)
            System.out.print("#");
        System.out.println();
    }
}
// 循环变量从1开始
public static void f2() {
    int n = 5;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < n + 1 - i; j++)
            System.out.print(" ");
        for (int j = n + 1 - i; j <= n; j++)
            System.out.print("#");
        System.out.println();
    }
}

题目五:

    #
   ###
  #####
 #######
#########
// 循环常量从0开始
public static void f1() {
    int n = 5;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n - 1 - i; j++)
            System.out.print(" ");
        for (int j = n - 1 - i; j <= n - 1 + i; j++)
            System.out.print("#");
        System.out.println();
    }
}
// 循环常量从1开始
public static void f2() {
    int n = 5;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < n + 1 - i; j++)
            System.out.print(" ");
        for (int j = n + 1 - i; j <= n - 1 + i; j++)
            System.out.print("#");
        System.out.println();
    }
}

题目六:

#############
  #########
    #####
      #
// 循环变量从0开始
public static void f1() {
    int n = 4;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < 2 * i; j++)
            System.out.print(" ");
        for (int j = 2 * i; j <= 4 * n - 4 - 2 * i; j++)
            System.out.print("#");
        System.out.println();
    }
}
//   循环变量从1开始
public static void f2() {
    int n = 4;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < 2 * i - 1; j++)
            System.out.print(" ");
        for (int j = 2 * i - 1; j <= 4 * n - 1 - 2 * i; j++)
            System.out.print("#");
        System.out.println();
    }
}

题目七:

   #
  ###
 #####
#######
 #####
  ###
   #
// 循环变量是从0开始
public static void f1() {
    int n = 4;
    // 前n行输出
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n - 1 - i; j++)
            System.out.print(" ");
        for (int j = n - 1 - i; j <= n - 1 + i; j++)
            System.out.print("#");
        System.out.println();
    }
    // 后n-1行输出
    for (int i = n; i < 2 * n - 1; i++) {
        for (int j = 0; j < 1 - n + i; j++)
            System.out.print(" ");
        for (int j = 1 - n + i; j <= 3 * n - 3 - i; j++)
            System.out.print("#");
        System.out.println();
    }
}
// 循环变量是从1开始
public static void f2() {
    //输出前n行图形
    int n = 4;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < n+1-i; j++)
            System.out.print(" ");
        for (int j = n+1-i; j <= n-1+i; j++)
            System.out.print("#");
        System.out.println();
    }
    //输出后n-1行图形
    for (int i = n+1; i <= 2*n-1; i++) {
        for (int j = 1; j < 1-n+i;j++)
            System.out.print(" ");
        for (int j = 1-n+i;j<= 3*n-1-i;j++)
            System.out.print("#");
        System.out.println();
    }
}
// " "
// i 1234567 行数
// j 0123210 " "的数量 → j = |i-4|

// *
// i 1234567
// j 7531357 "*"的数量  → j = 7-2*|i-4|
for (int i = 1; i <= 7; i++) {
    for (int j = 1; j <= Math.abs(4 - i); j++)
        System.out.print(" ");
    for (int j = 1; j<=7-2*Math.abs(4-i);j++)
        System.out.print("*");
    System.out.println();
}

题目八:

#######
 #####
  ###
   #
  ###
 #####
#######
// 循环变量从0开始
public static void f1() {
    int n = 4;
    // 前n行输出
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++)
            System.out.print(" ");
        for (int j = i; j <= 2 * n - 2 - i; j++)
            System.out.print("#");
        System.out.println();
    }
    // 后n-1行输出
    for (int i = n; i < 2 * n - 1; i++) {
        for (int j = 0; j < 2 * n - 2 - i; j++)
            System.out.print(" ");
        for (int j = 2 * n - 2 - i; j <= i; j++)
            System.out.print("#");
        System.out.println();
    }
}
// 循环变量从1开始
public static void f2() {
    // 输出前n行图形
    int n = 4;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j < i; j++)
            System.out.print(" ");
        for (int j = i; j <= 2 * n - i; j++)
            System.out.print("#");
        System.out.println();
    }
    // 输出后n-1行图形
    for (int i = n + 1; i <= 2 * n - 1; i++) {
        for (int j = 1; j < 2 * n - i; j++)
            System.out.print(" ");
        for (int j = 2 * n - i; j <= i; j++)
            System.out.print("#");
        System.out.println();
    }
}
// 1234567 行数
// 0123210 " "的数量 → j = 3-|i-4|
// 1234567 行数
// 7531357 "*"的数量 → j = 2*|x-4|+1
for (int i = 1; i <= 7; i++) {
    for (int j = 1; j <= 3 - Math.abs(4 - i); j++)
        System.out.print(" ");
    for (int j = 1; j <= 2 * Math.abs(4 - i) + 1; j++)
        System.out.print("*");
    System.out.println();
}

怎么快速找到边界,以下面的图形为例。

#####
 ####
  ###
   ##
    #

将它想象成一个坐标系,以向右为正方向的x轴和以向下为正方向的y轴。之所以将向下定为y轴的正方向是因为y坐标正好可以设定为行数
第一行#的坐标分别是(1,1),(2,1),(3,1),(4,1),(5,1)
第二行#的坐标就是(2,2),(2,3),(2,4),(2,5)
……
第五行#的坐标是(5,5)
只要确定边界方程,就可以写出循环变量的变化范围
利用循环语句输出图形 - 图1

可以看到一条边界过(1,1),(2,2),(3,3),(4,4),(5,5)
任意3个点就可以确定方程,这条边界线就是x=y。
为什么是写成x=y 而不是 y=x,在我们循环打印中都是按行打印,需要知道的是每行要打印多少字符,求的是x的取值范围而不是y的。
利用循环语句输出图形 - 图2

同样的看第四题

    #
   ##
  ###
 ####
#####

边界线过(5,1),(4,2),(3,3),(2,4),(1,5)
随便3个点可以确定方程是x = 6 - y
利用循环语句输出图形 - 图3
循环变量以0开始的情况 第一行变量是变成(x,0),同样可以确定边界方程。