# Star 題目詳解(Python & C & Java) 112/12/05開始製作 112/12/06完成 --- ## No.1 題目: :::success 輸入一個數 target 輸出長為 target 的三角形 ::: :::info ![n1](https://hackmd.io/_uploads/ByFIr72ST.png) ::: 解題思路: :::danger 1. 兩個迴圈。 2. 外迴圈控制行數,內迴圈控制每行的星號數。 3. 每印一行星號後換行。 ::: :::spoiler :::warning Python-1 ```python= # 使用 input() 函數接收使用者輸入的目標值,存放在變數 a 中 a = int(input()) # 外部迴圈,用於控制行數,從 1 開始,一直到目標值 a for i in range(1, a+1): # 內部迴圈,用於印出每一行的星號 '*',次數由外部迴圈的計數器 i 決定 print('*' * i) ``` --- Python-2 ```python= for i in range(1,int(input())+1):print('*'*i) ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { // 宣告變數 a、i、k 來表示輸入數值及迴圈計數器 int a, i, k; // 使用 scanf 函數接收使用者輸入的目標值,存放在變數 a 中 scanf("%d", &a); // 外部迴圈,用於控制行數,從 1 開始,一直到目標值 a for (i = 1; i <= a; i++) { // 內部迴圈,用於在每一行印出星號 '*',次數由外部迴圈的計數器 i 決定 for (k = 0; k < i; k++) printf("*"); // 換行,形成三角形的效果 printf("\n"); } // 程式執行完畢,回傳 0 表示成功執行 return 0; } ``` --- Java ```java= import java.util.Scanner; public class n1 { public static void main(String[] args) { // 建立 Scanner 物件以接收使用者輸入 Scanner input = new Scanner(System.in); // 宣告變數 a、i、k 來表示輸入數值及迴圈計數器 int a = input.nextInt(), i, k; // 外部迴圈,用於控制行數,從 1 開始,一直到目標值 a for (i = 1; i <= a; i++) { // 內部迴圈,用於在每一行印出星號 '*',次數由外部迴圈的計數器 i 決定 for (k = 0; k < i; k++) System.out.print("*"); // 換行,形成三角形的效果 System.out.println(); } } } ``` ::: --- ## No.2 題目: :::success 輸入一個數 target 輸出長為 target 的三角形 ::: :::info ![n2](https://hackmd.io/_uploads/By5Iw72HT.png) ::: 解釋: :::danger 使用兩個迴圈。 外迴圈控制行數,內迴圈控制每行的星號數。 每印一行星號後換行。 ::: :::spoiler :::warning Python-1 ```python= # 使用者輸入一個數字,將其轉換為整數並存放在變數 a 中 a = int(input()) # 遞減迴圈,從 a 遞減到 1 for i in range(a, 0, -1): # 在每一行印出 i 個星號 '*' print('*' * i) ``` --- Python-2 ```python= for i in range(int(input()),0,-1):print('*'*i) ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { // 宣告變數 a、i、k 分別表示輸入數值、外部迴圈計數器、內部迴圈計數器 int a, i, k; // 使用 scanf 函數接收使用者輸入的目標值,存放在變數 a 中 scanf("%d", &a); // 外部迴圈,用於控制行數,從 0 開始,到 a-1 結束 for (i = 0; i < a; i++) { // 內部迴圈,用於在每一行印出星號 '*',次數由外部迴圈的計數器 i 決定 for (k = a; k > i; k--) printf("*"); // 換行,形成三角形的效果 printf("\n"); } // 程式執行完畢,回傳 0 表示成功執行 return 0; } ``` --- Java ```java= import java.util.Scanner; public class n2 { public static void main(String[] args) { // 宣告變數 a、i、k 分別表示輸入數值、外部迴圈計數器、內部迴圈計數器 Scanner input = new Scanner(System.in); int a = input.nextInt(), i, k; // 外部迴圈,用於控制行數,從 a 開始,遞減到 1 for (i = a; i > 0; i--) { // 內部迴圈,用於在每一行印出星號 '*',次數由外部迴圈的計數器 i 決定 for (k = 0; k < i; k++) System.out.print("*"); // 換行,形成三角形的效果 System.out.println(); } } } ``` ::: --- ## No.3 題目: :::success 輸入一個數 target 輸出長為 target 的三角形 ::: :::info ![n3](https://hackmd.io/_uploads/BkjPwQ2ST.png) ::: 解釋: :::danger 1. 使用兩個迴圈。 2. 外迴圈控制行數,內迴圈控制每行的空格和星號數。 3. 在每一行印出空格和星號後換行。 ::: :::spoiler :::warning Python ```python= # 使用者輸入一個數字,將其轉換為整數並存放在變數 a 中 a = int(input()) # 外部迴圈,用於控制行數,從 1 開始,到 a 結束 for i in range(1, a + 1): # 在每一行印出空格,數量為 a 到 i print(' ' * (a - i) + '*' * i) ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { int a, i, k; scanf("%d", &a); // 外部迴圈,用於控制行數,從 0 開始,到 a-1 結束 for (i = 0; i < a; i++) { // 在每一行印出空格,數量為 a-1 到 i for (k = a - 1; k > i; k--) printf(" "); // 在每一行印出星號,數量為 0 到 i for (k = 0; k <= i; k++) printf("*"); // 換行,形成三角形的效果 printf("\n"); } // 程式執行完畢,回傳 0 表示成功執行 return 0; } ``` --- Java ```java= import java.util.Scanner; public class n3 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(), i, k, t; // 外部迴圈,用於控制行數,從 a 開始,遞減到 1 for (i = a; i > 0; i--) { // 在每一行印出空格,數量為 i-1 t = i - 1; for (k = 0; k < t; k++) System.out.print(" "); // 在每一行印出星號,數量為 a-i+1 t = a - i + 1; for (k = 0; k < t; k++) System.out.print("*"); // 換行,形成三角形的效果 System.out.println(); } } } ``` ::: --- ## No.4 題目: :::success 輸入一個數 target 輸出長為 target 的三角形 ::: :::info ![n4](https://hackmd.io/_uploads/ByPdDX2BT.png) ::: 解釋: :::danger 1. 使用兩個迴圈。 2. 外迴圈控制行數,內迴圈控制每行的空格和星號數。 3. 在每一行印出空格和星號後換行。 ::: :::spoiler :::warning Python ```python= # 使用者輸入一個數字,將其轉換為整數並存放在變數 a 中 a = int(input()) # 外部迴圈,用於控制行數,從 a 遞減到 0 for i in range(a, -1, -1): # 在每一行印出空格,數量為 a 到 i # 再印出星號,數量為 i 到 0 print(' ' * (a - i) + '*' * i) ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { int a, i, k; scanf("%d", &a); // 外部迴圈,用於控制行數,從 0 開始,到 a-1 結束 for (i = 0; i < a; i++) { // 在每一行印出空格,數量為 0 到 i-1 for (k = 1; k <= i; k++) printf(" "); // 在每一行印出星號,數量為 a 到 i for (k = a; k > i; k--) printf("*"); // 換行,形成三角形的效果 printf("\n"); } // 程式執行完畢,回傳 0 表示成功執行 return 0; } ``` --- Java ```java= import java.util.Scanner; public class n4 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(), i, k, t; // 外部迴圈,用於控制行數,從 1 開始,到 a 結束 for (i = 1; i <= a; i++) { // 在每一行印出空格,數量為 i-1 t = i - 1; for (k = 0; k < t; k++) System.out.print(" "); // 在每一行印出星號,數量為 a 到 i t = a - i + 1; for (k = 0; k < t; k++) System.out.print("*"); // 換行,形成三角形的效果 System.out.println(); } } } ``` ::: --- ## No.5 題目: :::success 輸入一個數 target 輸出高為 target 的三角形 ::: :::info ![n5](https://hackmd.io/_uploads/SkpFwX2Sa.png) ::: 解釋: :::danger 1. 使用三個迴圈。 2. 外部迴圈控制行數。 3. 第一個內部迴圈印出空格。 4. 第二個內部迴圈印出星號,星號數量為 i*2-1。 5. 在每一行印出空格和星號後換行。 ::: :::spoiler :::warning Python ```python= # 使用者輸入一個數字,將其轉換為整數並存放在變數 a 中 a = int(input()) # 外部迴圈,用於控制行數,從 1 開始,到 a 結束 for i in range(1, a + 1): # 在每一行印出空格,數量為 a 到 i # 再印出星號,數量為 i*2-1 print(' ' * (a - i) + '*' * (i * 2 - 1)) ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { int a, i, k, t; scanf("%d", &a); // 外部迴圈,用於控制行數,從 1 開始,到 a 結束 for (i = 1; i <= a; i++) { // 在每一行印出空格,數量為 a 到 i-1 for (k = a; k > i; k--) printf(" "); // 計算星號的數量,為 i*2-1 t = i * 2 - 1; // 在每一行印出星號,數量為 t for (k = 0; k < t; k++) printf("*"); // 換行,形成三角形的效果 printf("\n"); } // 程式執行完畢,回傳 0 表示成功執行 return 0; } ``` --- Java ```java= import java.util.Scanner; public class n5 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(), i, k, t; // 外部迴圈,用於控制行數,從 a 開始,遞減到 1 for (i = a; i > 0; i--) { // 在每一行印出空格,數量為 i-1 t = i - 1; for (k = 0; k < t; k++) System.out.print(" "); // 計算星號的數量,為 (a-i+1)*2-1 t = (a - i + 1) * 2 - 1; // 在每一行印出星號,數量為 t for (k = 0; k < t; k++) System.out.print("*"); // 換行,形成三角形的效果 System.out.println(); } } } ``` ::: --- ## No.6 題目: :::success 輸入一個數 target 輸出高為 target*2-1 的實心菱形 測資保證 target > 2 ::: :::info ![n6](https://hackmd.io/_uploads/HJPpD73S6.png) ::: 解釋: :::danger 1. 總計6個迴圈 2. 三角形上半與下半分開處理 3. 空格和星號用兩個迴圈分開處理 ::: :::spoiler :::warning Python ```python= a = int(input()) # 上半部分的三角形 for i in range(1, a + 1): # 在每一行印出空格,數量為 a 到 i # 再印出星號,數量為 i*2-1 print(' ' * (a - i) + '*' * (i * 2 - 1)) # 下半部分的三角形 for i in range(a - 1, 0, -1): # 在每一行印出空格,數量為 a 到 i # 再印出星號,數量為 i*2-1 print(' ' * (a - i) + '*' * (i * 2 - 1)) ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { int a, i, k, t; scanf("%d", &a); // 上半部分的三角形 for (i = 1; i < a; i++) { // 在每一行印出空格,數量為 a 到 i-1 for (k = a - 1; k > i; k--) printf(" "); // 計算星號的數量,為 i*2-1 t = i * 2 - 1; // 在每一行印出星號,數量為 t for (k = 0; k < t; k++) printf("*"); // 換行,形成三角形的效果 printf("\n"); } // 下半部分的三角形 for (i = a - 2; i > 0; i--) { // 在每一行印出空格,數量為 a 到 i for (k = a - 1; k > i; k--) printf(" "); // 計算星號的數量,為 i*2-1 t = i * 2 - 1; // 在每一行印出星號,數量為 t for (k = 0; k < t; k++) printf("*"); // 換行,形成三角形的效果 printf("\n"); } return 0; } ``` --- Java ```java= import java.util.Scanner; public class n6 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(), i, k, t; // 上半部分的三角形 for (i = a; i > 0; i--) { // 在每一行印出空格,數量為 i-1 for (k = 0; k < i - 1; k++) System.out.print(" "); // 計算星號的數量,為 (a-i+1)*2-1 t = (a - i + 1) * 2 - 1; // 在每一行印出星號,數量為 t for (k = 0; k < t; k++) System.out.print("*"); // 換行,形成三角形的效果 System.out.println(); } // 下半部分的三角形 for (i = 2; i <= a; i++) { // 在每一行印出空格,數量為 i-1 for (k = 0; k < i - 1; k++) System.out.print(" "); // 計算星號的數量,為 (a-i+1)*2-1 t = (a - i + 1) * 2 - 1; // 在每一行印出星號,數量為 t for (k = 0; k < t; k++) System.out.print("*"); // 換行,形成三角形的效果 System.out.println(); } } } ``` ::: --- ## No.7 題目: :::success 輸入一個數 target 輸出高為 target*2-1 的中空菱形 測資保證 target > 2 ::: :::info ![n7](https://hackmd.io/_uploads/HyK0vXnBp.png) ::: 解釋: :::danger 1. 總計8個迴圈 2. 第一行與最後一行分開處理 3. 跟第6題一樣,上半下半分開處理,只是這題多了一個計算空格的迴圈 ::: :::spoiler :::warning Python ```python= a = int(input()) # 印出第一行 print(' ' * (a - 1) + '*') # 上半部分空心菱形 for i in range(1, a - 1): print(' ' * (a - i - 1) + '*' + ' ' * (i * 2 - 1) + '*') # 下半部分空心菱形 for i in range(a - 1, 0, -1): print(' ' * (a - i - 1) + '*' + ' ' * (i * 2 - 1) + '*') # 印出最後一行 print(' ' * (a - 1) + '*') ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { int a, i, k, t; scanf("%d", &a); // 印出第一行 for (i = 0; i < a - 1; i++) printf(" "); printf("*\n"); // 上半部分空心菱形 for (i = a - 1; i > 0; i--) { t = i - 1; for (k = 0; k < t; k++) printf(" "); printf("*"); t = (a - i) * 2 - 1; for (k = 0; k < t; k++) printf(" "); printf("*\n"); } // 下半部分空心菱形 for (i = 2; i < a; i++) { t = i - 1; for (k = 0; k < t; k++) printf(" "); printf("*"); t = (a - i) * 2 - 1; for (k = 0; k < t; k++) printf(" "); printf("*\n"); } // 印出最後一行 for (i = 0; i < a - 1; i++) printf(" "); printf("*\n"); return 0; } ``` --- Java ```java= import java.util.Scanner; public class n7 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(), i, k, t; // 印出第一行 for (i = 0; i < a - 1; i++) System.out.print(" "); System.out.println("*"); // 上半部分空心菱形 for (i = a - 1; i > 0; i--) { t = i - 1; for (k = 0; k < t; k++) System.out.print(" "); System.out.print("*"); t = (a - i) * 2 - 1; for (k = 0; k < t; k++) System.out.print(" "); System.out.println("*"); } // 下半部分空心菱形 for (i = 2; i < a; i++) { t = i - 1; for (k = 0; k < t; k++) System.out.print(" "); System.out.print("*"); t = (a - i) * 2 - 1; for (k = 0; k < t; k++) System.out.print(" "); System.out.println("*"); } // 印出最後一行 for (i = 0; i < a - 1; i++) System.out.print(" "); System.out.println("*"); } } ``` ::: --- ## No.8 題目: :::success 輸入一個數 target 輸出高為 target*2-1 的X ::: :::info ![n8](https://hackmd.io/_uploads/HyfeuQhHa.png) ::: 解釋: :::danger 1. 總計7個迴圈 2. 分成上半、中間、下半,三部分來處理 3. 上半和下半的程式跟第七題很像 4. 中間的程式...應該不用多說,直接一個迴圈處理空格,然後放上*就好 ::: :::spoiler :::warning Python ```python= a = int(input()) # 接收使用者輸入的數字 # 上半部分X for i in range(a - 1): print(' ' * i + '*' + ' ' * ((a - i - 1) * 2 - 1) + '*') # 中間部分X print(' ' * (a - 1) + '*') # 下半部分X for i in range(a - 2, -1, -1): print(' ' * i + '*' + ' ' * ((a - i - 1) * 2 - 1) + '*') ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { int a, i, k, t; scanf("%d", &a); // 接收使用者輸入的數字 // 上半部分X for (i = 1; i < a; i++) { for (k = 1; k < i; k++) printf(" "); printf("*"); for (k = (a - i) * 2 - 1; k > 0; k--) printf(" "); printf("*\n"); } // 中間部分X for (i = 1; i < a; i++) printf(" "); printf("*\n"); // 下半部分X for (i = 1; i < a; i++) { t = a - i; for (k = 1; k < t; k++) printf(" "); printf("*"); t = i * 2; for (k = 1; k < t; k++) printf(" "); printf("*\n"); } return 0; } ``` --- Java ```java= import java.util.Scanner; public class n8 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(); // 接收使用者輸入的數字 int i, k, t; // 上半部分X for (i = 1; i < a; i++) { for (k = 1; k < i; k++) System.out.print(" "); System.out.print("*"); for (k = (a - i) * 2 - 1; k > 0; k--) System.out.print(" "); System.out.println("*"); } // 中間部分X for (i = 1; i < a; i++) System.out.print(" "); System.out.println("*"); // 下半部分X for (i = 1; i < a; i++) { t = a - i; for (k = 1; k < t; k++) System.out.print(" "); System.out.print("*"); t = i * 2; for (k = 1; k < t; k++) System.out.print(" "); System.out.println("*"); } } } ``` ::: --- ## No.9 題目: :::success 輸入一個數 target 輸出高為 target*2-1 的漏斗 測資保證 target > 2 ::: :::info ![n9](https://hackmd.io/_uploads/HylX_Xnr6.png) ::: 解釋: :::danger 1. 總計9個迴圈 2. 分成第一行、上半、中間、下半、最後一行,5部分來處理 3. 第一行和最後一行,直接印出*即可 4. 其餘都跟第八題一樣 ::: :::spoiler :::warning Python ```python= a = int(input()) # 接收使用者輸入的數字 # 上半部分漏斗 print('*' * (a * 2 - 1)) for i in range(1, a - 1): print(' ' * i + '*' + ' ' * ((a - i - 1) * 2 - 1) + '*') # 中間部分漏斗 print(' ' * (a - 1) + '*') # 下半部分漏斗 for i in range(a - 2, 0, -1): print(' ' * i + '*' + ' ' * ((a - i - 1) * 2 - 1) + '*') # 底部 print('*' * (a * 2 - 1)) ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { int a, i, k, t; scanf("%d", &a); // 接收使用者輸入的數字 t = a * 2 - 1; // 上半部分漏斗 for (i = 0; i < t; i++) printf("*"); printf("\n"); for (i = 2; i < a; i++) { for (k = 1; k < i; k++) printf(" "); printf("*"); for (k = (a - i) * 2 - 1; k > 0; k--) printf(" "); printf("*\n"); } // 中間部分漏斗 for (i = 1; i < a; i++) printf(" "); printf("*\n"); // 下半部分漏斗 for (i = 1; i < a - 1; i++) { t = a - i; for (k = 1; k < t; k++) printf(" "); printf("*"); t = i * 2; for (k = 1; k < t; k++) printf(" "); printf("*\n"); } // 底部 t = a * 2 - 1; for (i = 0; i < t; i++) printf("*"); printf("\n"); return 0; } ``` --- Java ```java= import java.util.Scanner; public class n9 { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(); // 接收使用者輸入的數字 int i, k, t; t = a * 2 - 1; // 上半部分漏斗 for (i = 0; i < t; i++) System.out.print("*"); System.out.println(); for (i = 2; i < a; i++) { for (k = 1; k < i; k++) System.out.print(" "); System.out.print("*"); for (k = (a - i) * 2 - 1; k > 0; k--) System.out.print(" "); System.out.println("*"); } // 中間部分漏斗 for (i = 1; i < a; i++) System.out.print(" "); System.out.println("*"); // 下半部分漏斗 for (i = 1; i < a - 1; i++) { t = a - i; for (k = 1; k < t; k++) System.out.print(" "); System.out.print("*"); t = i * 2; for (k = 1; k < t; k++) System.out.print(" "); System.out.println("*"); } // 底部 t = a * 2 - 1; for (i = 0; i < t; i++) System.out.print("*"); System.out.println(); } } ``` ::: --- ## No.10 題目: :::success 輸入 num1 和 num2 輸出 num2 個高為 num1*2-1 的X 測資保證 num1 > 2 ::: :::info ![n10](https://hackmd.io/_uploads/SJcVuQnBp.png) ::: 解釋: :::danger 這題難度非常高,以下只會提供非常簡單的解釋 考試應該是不會出這題(除非老師鐵了心要把咱全當掉) 1. 總計17個迴圈 2. 至多會需要3層迴圈 3. 分成第一行、上半、中間、下半、最後一行,5部分來處理 4. 第一行與最後一行程式 先印出一顆* 之後再迴圈處理空格和* 5. 上半、下半與中間 跟第八題很像,只是要再其尾部加上空格處理 然後外圍要再加上一個迴圈處理重複次數 ::: :::spoiler :::warning Python ```python= # 接收使用者輸入的兩個數字,分別代表 X 的高度和重複的次數 num1, num2 = int(input()), int(input()) # 上半部分 X,一行中包含 num2 個 X,每個 X 的形狀為 '*'+(' '*((num1-1)*2-1)+'*') print('*' + (' ' * ((num1 - 1) * 2 - 1) + '*') * num2) # 中間部分 X,使用兩個迴圈,外迴圈控制高度,內迴圈控制重複次數 for i in range(1, num1 - 1): for j in range(num2): print(' ' * i + '*' + ' ' * ((num1 - i - 1) * 2 - 1) + '*' + ' ' * (i - 1), end='') print() # 中間底部 X,一行中包含 num2 個 X,每個 X 的形狀為 ' '*(num1-1)+'*'+' '*(num1-2) print((' ' * (num1 - 1) + '*' + ' ' * (num1 - 2)) * num2) # 下半部分 X,使用兩個迴圈,外迴圈控制高度,內迴圈控制重複次數 for i in range(num1 - 2, 0, -1): for j in range(num2): print(' ' * i + '*' + ' ' * ((num1 - i - 1) * 2 - 1) + '*' + ' ' * (i - 1), end='') print() # 下半部分 X,一行中包含 num2 個 X,每個 X 的形狀為 '*'+(' '*((num1-1)*2-1)+'*') print('*' + (' ' * ((num1 - 1) * 2 - 1) + '*') * num2) ``` --- C ```c= #include <stdio.h> #include <stdlib.h> int main() { // 宣告變數 int num1, num2, i, j, k, t, x; // 接收使用者輸入的兩個數字,分別代表 X 的高度和重複的次數 scanf("%d %d", &num1, &num2); // 第一行 X,每個 X 的形狀為 '*'+(' '*((num1-1)*2-1)+'*') printf("*"); for (i = 0; i < num2; i++) { for (j = 0; j < (num1 - 1) * 2 - 1; j++) { printf(" "); } printf("*"); } printf("\n"); // 上半部分 X j = 2; for (x = 0; x < num1 - 2; x++) { for (i = 0; i < num2; i++) { // 左側空格 for (k = 1; k < j; k++) { printf(" "); } // 左側 '*' printf("*"); // 中間空格 for (k = (num1 - j) * 2 - 1; k > 0; k--) { printf(" "); } // 右側 '*' printf("*"); // 右側空格 for (k = 2; k < j; k++) { printf(" "); } } j++; printf("\n"); } // 中間底部 X,每個 X 的形狀為 ' '*(num1-1)+'*'+' '*(num1-2) for (i = 0; i < num2; i++) { for (j = 1; j < num1; j++) { printf(" "); } printf("*"); for (j = 2; j < num1; j++) { printf(" "); } } printf("\n"); // 下半部分 X j = num1 - 1; for (x = 0; x < num1 - 2; x++) { for (i = 0; i < num2; i++) { // 左側空格 for (k = 1; k < j; k++) { printf(" "); } // 左側 '*' printf("*"); // 中間空格 for (k = (num1 - j) * 2 - 1; k > 0; k--) { printf(" "); } // 右側 '*' printf("*"); // 右側空格 for (k = 2; k < j; k++) { printf(" "); } } j--; printf("\n"); } // 最後一行 X,每個 X 的形狀為 '*'+(' '*((num1-1)*2-1)+'*') printf("*"); for (i = 0; i < num2; i++) { for (j = 0; j < (num1 - 1) * 2 - 1; j++) { printf(" "); } printf("*"); } return 0; } ``` --- Java ```java= import java.util.Scanner; public class n10 { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 讀取輸入,num1 為 X 的高度,num2 為 X 的個數 int num1 = input.nextInt(), num2 = input.nextInt(), i, j, k, t, x; // 第一行 X,每個 X 的形狀為 '*' + (' '*((num1-1)*2-1) + '*') * num2 System.out.print("*"); for (i = 0; i < num2; i++) { for (j = 0; j < (num1 - 1) * 2 - 1; j++) { System.out.print(" "); } System.out.print("*"); } System.out.println(); // 上半部分 X j = 2; for (x = 0; x < num1 - 2; x++) { for (i = 0; i < num2; i++) { // 左側空格 for (k = 1; k < j; k++) { System.out.print(" "); } // 左側 '*' System.out.print("*"); // 中間空格 for (k = (num1 - j) * 2 - 1; k > 0; k--) { System.out.print(" "); } // 右側 '*' System.out.print("*"); // 右側空格 for (k = 2; k < j; k++) { System.out.print(" "); } } j++; System.out.println(); } // 中間行 X for (i = 0; i < num2; i++) { // 左側空格 for (j = 1; j < num1; j++) { System.out.print(" "); } // 左側 '*' System.out.print("*"); // 右側空格 for (j = 2; j < num1; j++) { System.out.print(" "); } } System.out.println(); // 下半部分 X j = num1 - 1; for (x = 0; x < num1 - 2; x++) { for (i = 0; i < num2; i++) { // 左側空格 for (k = 1; k < j; k++) { System.out.print(" "); } // 左側 '*' System.out.print("*"); // 中間空格 for (k = (num1 - j) * 2 - 1; k > 0; k--) { System.out.print(" "); } // 右側 '*' System.out.print("*"); // 右側空格 for (k = 2; k < j; k++) { System.out.print(" "); } } j--; System.out.println(); } // 最後一行 X,形狀同第一行 System.out.print("*"); for (i = 0; i < num2; i++) { for (j = 0; j < (num1 - 1) * 2 - 1; j++) { System.out.print(" "); } System.out.print("*"); } } } ``` :::