利用循环语句输出图形

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

题目一:

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

由于有些题目循环变量从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),(2,2),(3,3),(4,4),(5,5)
任意3个点就可以确定方程,这条边界线就是x=y。
为什么是写成x=y 而不是 y=x,在我们循环打印中都是按行打印,需要知道的是每行要打印多少字符,求的是x的取值范围而不是y的。
在这里插入图片描述

同样的看第四题

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

边界线过(5,1),(4,2),(3,3),(2,4),(1,5)
随便3个点可以确定方程是x = 6 - y
在这里插入图片描述
循环变量以0开始的情况 第一行变量是变成(x,0),同样可以确定边界方程。

相关推荐
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页