首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 經典算法題求解:從題目理解到完整源碼實現

     編輯:程式設計疑難解答

題目還原與分析

根據圖片提示,這是一道典型的 Java 算法練習題,涉及圖形繪製、遞歸遍歷或數學規律推導。雖然原始圖片不可見,但從回覆中的代碼可推測為「繪製特定幾何圖案」或「矩陣填充」類問題。

參考解決方案代碼

最佳回答提供了完整的 Java 實現:

import java.util.*;

public class A {
    static char[][] Zu;
    
    static class Tur {
        int dr = 0, di = -1; // 方向向量:初始向上
        int x = 0, y = 0;    // 當前位置
        
        void left() {        // 左轉 90°
            int dr2 = di; int di2 = -dr;
            dr = dr2; di = di2;
        }
        void right() {       // 右轉 90°
            int dr2 = -di; int di2 = dr;
            dr = dr2; di = di2;
        }
        void dot() {         // 標記當前位置
            Zu[x][y] = '$';
        }
        void go() {          // 前進一步
            x += dr; y += di;
        }
    }
    
    static void show() {     // 打印矩陣
        for (int i = 0; i < Zu.length; i++) {
            for (int j = 0; j < Zu[i].length; j++) {
                System.out.print(Zu[i][j] > 0 ? Zu[i][j] : '.');
            }
            System.out.println();
        }
    }
    
    static void f(int n, int x0, int y0) { // 繪製單個模塊
        Tur tur = new Tur();
        tur.x = x0 + 2; tur.y = y0 + 2;
        for (int k = 0; k < 4; k++) {
            for (int i = 0; i < 2; i++) { tur.dot(); tur.go(); }
            tur.right();
            for (int i = 0; i < 4 * n; i++) { tur.dot(); tur.go(); }
            tur.right();
            for (int i = 0; i < 2; i++) { tur.dot(); tur.go(); }
            tur.left();
        }
    }
    
    static void test(int n) { // 測試入口
        Zu = new char[4 * n + 5][4 * n + 5];
        for (int i = n; i >= 0; i--) 
            f(i, 2 * n - i * 2, 2 * n - i * 2);
        show();
    }
    
    public static void main(String[] args) {
        test(5); // 輸出 5 層圖案
        // test(13); // 可擴展
    }
}

核心算法解析

  1. 海龜繪圖模型:Tur 類封裝位置、方向、移動、轉向、標記操作,模擬 Logo 語言繪圖邏輯
  2. 遞歸/迭代結構:test() 從外層向內層調用 f(),每層尺寸遞減,位置向中心偏移
  3. 矩陣作畫布:char[][] Zu 作為離屏緩衝區,最終統一輸出
  4. 幾何規律:每層包含 4 個邊,邊長與層數 n 相關,轉向序列固定

學習價值與擴展方向

  • 基礎鞏固:二維數組操作、類設計、循環嵌套、坐標變換
  • 進階思考:如何將硬編碼邏輯抽象為通用繪圖引擎?支持任意多邊形、填充、旋縮放?
  • 可視化升級:替換控制台輸出為 Swing/JavaFX/Processing 圖形界面
  • 算法優化:大尺寸圖案時,稀疏矩陣存儲(Map)更節省內存

新手練習建議

  1. 手動模擬 n=1 時的執行流程,在紙上畫出坐標變化
  2. 修改 dot() 字符、顏色、畫筆粗細,觀察輸出變化
  3. 嘗試實現「螺旋線」、「科赫雪花」、「龍曲線」等經典分形圖案
  4. 閱讀 java.awt.Graphics2D API,理解專業繪圖庫的設計思想
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved