問題描述:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | |
1 | * | ||||||||||
2 | * | * | |||||||||
3 | * | * | * | ||||||||
4 | * | * | * | * | |||||||
5 | * | * | * | * | * | ||||||
6 | * | * | * | * | * | * | |||||
7 | * | * | * | * | * | ||||||
8 | * | * | * | * | |||||||
9 | * | * | * | ||||||||
10 | * | * | |||||||||
11 | * |
問題分析:
菱形的組成:空格+星號,可以看做是上下兩個三角形組成。
星號最多的一行是中間的一行maxNum:(11+1)/2=6,也就是第6行。
上三角:第一行到第六行
空格與行號的關係:
每一行最左邊起空格數量=maxNum-當前行號,如第8行有2個空格:8-6=2個。
星號與行號的關係:
每一行最左邊起星號的數量=當前行號,如第2行有2個星號。
下三角:
思路一:第七行到第十一行
思路二:相當於第五行到第一行
空格與行號的關係:
每一行最左邊起空格數量=當前行號-maxNum,如第3行有3個空格:6-3=3個。
星號與行號的關係:
每一行最左邊起星號的數量=當前行號-2*空格數,如第10行有2個星號:10-2*(10-6)=2個。
完整代碼:
/*
* @Description:
* @version:
* @Author: Zero
* @LastEditors: Zero
* @LastEditTime: 2020-04-11 16:39:28
*/
public class HomeWork {
public static void main(String args[]) {
HomeWork hw = new HomeWork();
hw.test();
}
public void test() {
int row = 11;// 行數,奇數
int maxNum = (row + 1) / 2; // 內容最多的一行的行數6
// 正三角
for (int i = 1; i <= maxNum; i++) {// 從第一行到最大行
// 空格
for (int j = 1; j <= maxNum - i; j++) {
System.out.print(" ");
}
// 內容
for (int k = 1; k <= i; k++) {
System.out.print("*");
System.out.print(" ");
}
// 換行
System.out.println();
}
// 下三角思路一:第七行到第十一行
for (int i = maxNum + 1; i < row + 1; i++) {
// 空格
for (int j = 1; j <= i - maxNum; j++) {
System.out.print(" ");
}
// 星號
for (int j = 0; j < i - 2 * (i - maxNum); j++) {
System.out.print("*");
System.out.print(" ");
}
System.out.println();
}
// 下三角思路二:第五行到第一行
// for (int i = row - maxNum; i > 0; i--) {
// // 空格
// for (int j = 1; j <= maxNum - i; j++) {
// System.out.print(" ");
// }
// // 內容
// for (int k = 1; k <= i; k++) {
// System.out.print("*");
// System.out.print(" ");
// }
// // 換行
// System.out.println();
// }
}
}
打印結果: