# Star 題目詳解(Python & C & Java)
112/12/05開始製作
112/12/06完成
---
## No.1
題目:
:::success
輸入一個數 target
輸出長為 target 的三角形
:::
:::info

:::
解題思路:
:::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

:::
解釋:
:::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

:::
解釋:
:::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

:::
解釋:
:::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

:::
解釋:
:::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

:::
解釋:
:::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

:::
解釋:
:::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

:::
解釋:
:::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

:::
解釋:
:::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

:::
解釋:
:::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("*");
}
}
}
```
:::