首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

算法趣題:用 * # @ 打印同心矩形層——Python/Java 實現與核心邏輯解析

     編輯:Java 相關知識

題目要求:根據寬 w、高 h 打印矩形,最外層 *,內部 #、@ 交替填充,形成同心矩形層效果。

預期輸出示例

printRect(21, 9);
*********************
*###################*
*#@@@@@@@@@@@@@@@@@#*
*#@###############@#*
*#@#@@@@@@@@@@@@@#@#*
*#@###############@#*
*#@@@@@@@@@@@@@@@@@#*
*###################*
*********************

核心算法思路

對任意位置 (i, j)(1-based),計算其到四邊的最小距離 p = min(j, w+1-j, i, h+1-i),即所在「層數」:

  • p == 1:最外層 → *
  • p % 2 == 0:偶數層 → #
  • p % 2 == 1:奇數層(>1)→ @

Python 參考實現

def printRect(w, h):
    for i in range(1, h+1):
        for j in range(1, w+1):
            p = min(min(j, w+1-j), min(i, h+1-i))
            if p == 1:
                print('*', end='')
            elif p % 2 == 0:
                print('#', end='')
            else:
                print('@', end='')
        print()

Java 移植版本

public void printRect(int w, int h) {
    for (int i = 1; i <= h; i++) {
        for (int j = 1; j <= w; j++) {
            int p = Math.min(Math.min(j, w + 1 - j), Math.min(i, h + 1 - i));
            if (p == 1) {
                System.out.print('*');
            } else if (p % 2 == 0) {
                System.out.print('#');
            } else {
                System.out.print('@');
            }
        }
        System.out.println();
    }
}

複雜度分析

時間 O(w×h),空間 O(1)。單次遍歷無額外存儲,極致高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved