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

MFC 實現約瑟夫環 (Josephus Problem) 遊戲:界面化代碼資源推薦

     編輯:程式設計綜合問答

約瑟夫環問題:N 人圍圈,每隔 M-1 人淘汰第 M 個,求最後倖存者位置。MFC 界面實現需包含參數輸入、動畫演示、結果顯示。

推薦資源

CSDN 博客提供完整 MFC 對話框專案源碼:
MFC 編寫約瑟夫生死遊戲 (含界面、動畫、源碼下載)

核心實現要點 (供自行開發參考)

  1. 界面設計:
    Edit Control 輸入 N、M;Button 「開始模擬」;List Control / ListBox 顯示淘汰序列;Static 顯示倖存者;Progress Bar 可選。
  2. 數據結構:
    std::list 或循環鏈表存儲人員編號,erase 實現 O(1) 淘汰。
  3. 動畫邏輯:
    SetTimer 觸發 OnTimer,每步高亮當前計數位置,KillTimer 結束。使用 CDC 繪製圓環分佈。
    或用 CListBox::SetCurSel 高亮列表項。
  4. 核心算法:
int josephus(int n, int m) {
    list people;
    for (int i = 1; i <= n; ++i) people.push_back(i);
    auto it = people.begin();
    while (people.size() > 1) {
        for (int k = 1; k < m; ++k) {
            ++it; if (it == people.end()) it = people.begin();
        }
        // 淘汰 it
        it = people.erase(it); // erase 返回下一個迭代器
        if (it == people.end()) it = people.begin();
    }
    return people.front();
}

擴展建議

  • 增加「步進執行」按鈕,單步演示算法過程。
  • 保存模擬記錄到文件。
  • 支持自定義淘汰規則 (如變步長)。

參考推薦源碼可快速獲得可運行的 MFC 完整專案,並可在此基礎上擴展教學/演示功能。

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