---
# System prepended metadata

title: Star題目詳解

---

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