第二次作業 個人專案實戰

2022-05-04 06:39:08 字數 2882 閱讀 8744

2,psp2.1

personal software process stages

預估耗時(分鐘)

planning

計畫20

· estimate

· 估計這個任務需要多少時間

20development

開發490

· analysis

· 需求分析 (包括學習新技術)

60· design spec

· 生成設計文件

120· design review

· 設計複審 (和同事審核設計文件)

120· coding standard

· **規範 (為目前的開發制定合適的規範)

10· design

· 具體設計

60· coding

· 具體編碼

60· code review

· **複審

30· test

· 測試(自我測試,修改**,提交修改)

30reporting

報告60

· test report

· 測試報告

20· size measurement

· 計算工作量

10· postmortem & process improvement plan

· 事後總結, 並提出過程改進計畫

30合計

5103,解題思路

對於數獨最大的印象應該是小時候買的文學雜誌上有簡單的數獨題目,所有剛開始沒什麼想法。後來檢視資料後對於解題思路的第乙個想法是從第一行第一列開始依次遞迴隨機生成數,就這樣做理論上能做出所有的棋盤,但是可能出現重複。為了避免重複,有想過以行為單位生成,如果遇到不可行就捨棄。這種方法有很多分支,其中有很大一部分是不可行的(同行,同列或同3*3格重複)。所以我打算採用第一行全排列,從第二行到第9行用隨機遞迴的方法。這樣做是能保證不重複,但是缺點是生成的數量較少,不過也有9!,即36萬多個。

4,設計實現過程

本次設計**包括三個函式:core,isright,print。core函式是核心函式用來生成每個位置的隨機數,每次從1~9中取出乙個數放到當前位置,並通過isright函式來判斷是否可行;isright函式用來判斷隨機數在相應位置是否可行,即判斷當前行,列以及3*3格是否有重複。同行同列的判斷相對簡單。同3*3格判斷需要找到該位所屬的3*3格,然後按先行後列的順序與格內所有數比較,直到重複或者比較到該位;print用來輸出數獨。流程圖大致如下:

5,**說明

主函式中next_permutation函式來給出不會重複的全排列。

core函式在1,2,3,4,5,6,7,8,9中隨機選乙個數並用過isright判斷,若9個數都不行就捨棄這個數獨。

6,執行測試

正確輸入

錯誤輸入

7,效能測試

從圖上可以看出,core和isright佔了大部分是時間,這是可以預見的,畢竟core是核心函式。但是也能注意到vector的操作意外地占用了很大一部分時間,所以我想在給第一行賦值時和print中可以使用迭代器進行來減少操作的時間。

8,實際時間

psp2.1

personal software process stages

預估耗時(分鐘)

實際耗時(分鐘)

planning

計畫20

20 · estimate

· 估計這個任務需要多少時間

2020 

development

開發490

720· analysis

· 需求分析 (包括學習新技術)

60 60 

· design spec

· 生成設計文件

120180

· design review

· 設計複審 (和同事審核設計文件)

120 

200· coding standard

· **規範 (為目前的開發制定合適的規範)

10 20

· design

· 具體設計

60 60

· coding

· 具體編碼

60 100

· code review

· **複審

30 40

· test

· 測試(自我測試,修改**,提交修改)

30 60

reporting

報告60 

60· test report

· 測試報告

20 20

· size measurement

· 計算工作量

10 10

· postmortem & process improvement plan

· 事後總結, 並提出過程改進計畫

30 30

合計510

8009,總結

這是我第一次用c++做自己的小專案,難度比我想象的大很多。因為知識儲備不足和時間太趕(剛開始沒想到要這麼久),演算法有很多缺陷。希望能通過乙個學期的學習增強自己。以後也會留更多時間給高階軟工這門課程。

第二次作業 個人專案實戰

github專案位址 作業位址 利用程式隨機構造出n個已解答的數獨棋盤 輸入 數獨棋盤題目個數n 輸出 隨機生成n個 不重複 的 已解答完畢的 數獨棋盤,並輸出到sudoku.txt中,輸出格式見下輸出示例。在生成數獨矩陣時,左上角的第乙個數為 學號後兩位相加 9 1。例如學生a學號後2位是80,則...

第二次作業 個人專案實戰

預估耗時 分鐘 實際耗時 分鐘 planning 計畫80 80estimate 估計任務時間 2020 development 開發300 360analysis 需求分析 60120 design 生成設計文件60 design review 設計複審60 coding standard 規範 ...

第二次作業 個人專案實戰 數獨

利用程式隨機構造出n個已解答的數獨棋盤。輸入 數獨棋盤題目個數n 0 n 1000000 輸出 隨機生成n個 不重複的已解答完畢的 數獨棋盤,並輸出到sudoku.txt中,且左上角的第乙個數為 學號後兩位相加 9 1先初始化乙個二維陣列sudoku 9 9 再往裡面填數字,而第乙個數字是規定的,我...