利用循环语句输出下列图形
题目一:
#
##
###
####
#####
由于有些题目循环变量从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),同样可以确定边界方程。