第二次實踐作業 數獨

2022-07-15 16:15:07 字數 2466 閱讀 6279

1)專案需求
利用程式隨機構造出n個已解答的數獨棋盤。

輸入: 數獨棋盤題目個數n(0< n<=1000000)

輸出:隨機生成n個 不重複 的 已解答完畢的 數獨棋盤,並輸出到sudoku.txt中

2)解題思路
之前對於數獨不是很了解,只是通過題目了解了一下數獨大致的規則,我最開始的想法

就是乙個乙個測試,對於滿足要求的數字,寫入。但是考慮到有些情況,可能會有1到9

全部都不滿足規定的情況,此時如果一直迴圈,將會陷入死迴圈,所以如果碰到有寫不

出數字的情況,應當對前面的數字進行修改,通過不斷修改,直到能得出乙個正確的情況,

所以從第一行開始,逐個給予隨機數,對於每個隨機數,判斷是否可以滿足條件,如果

滿足,則將其填入,不滿足就要從該數字開始,一直加1,如果大於9的話就令其減9,

如果1到9都不滿足條件,將正行刪除,從第一列開始重新寫隨機數,這樣可能會得出正確

的結論。

遇到的困難:

主要還是演算法有些缺陷,稍微修改就會出現無線迴圈的情況,改了好幾次還是一樣,目前好像

只能得出一種答案,對於多種答案老是會出錯,會出現空的情況,而且後面的幾個矩陣數字與

第乙個相同。

3)設計實現

通過構造二維陣列實現對九宮格的模擬,然後固定下第乙個數,接著對下個數進行測試,隨機生出乙個數,

如果能成功,就下乙個,如果不成功,就將該數加一,超過9的話自動減9,如果1到9都不能成功,那就將正行

刪除。4)關鍵**說明

//測試函式,能滿足條件返回1,不滿足返回0

int check(int s[9][9], int x, int i, int j)

} for (u = 0; u < 9; u++)

w1 = (i +1)/ 3;

w2 = (j+1) / 3;

w3 = (i +1)% 3;

w4 = (j+1) % 3;

if (w3 == 0)

if (w4 == 0)

w2 = w2 - 1;

for (u = 3 * w1; u < 3 * (w1 + 1); u++) }

return 1;

}//測試如果成功,則寫入,不成功就消除整行

for (j = s; j < 9; j++)

}if (loop > 0 && loop < 9)

}if (loop == 9)

j = 0;

break;

} }

6)關於執行力與泛泛而談

執行力是將想法轉換為行動的能力,乙個人執行力的高,就能更多的將想法付諸實踐,也就能更好的將事情做好,

執行力低經常想拖延,無法及時完成任務,而且對於事情的處理不夠嚴謹,所以執行力是乙個人成功與否的重要衡量指標。

psp2.1

personal software process stages

預估耗時(分鐘)

實際耗時(分鐘)

planning

計畫.30

50· estimate

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

150200

development

開發100

120· analysis

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

200180

· design spec

· 生成設計文件

4045

· design review

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

2025

· coding standard

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

1520

· design

· 具體設計

300350

· coding

· 具體編碼

200210

· code review

· **複審

2020

· test

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

2025

reporting

報告30

35· test report

· 測試報告

1518

· size measurement

· 計算工作量510

· postmortem & process improvement plan

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

3040

合計1190

1360

軟工實踐第二次作業 數獨

psp2.1 personal software process stages 預估耗時 分鐘 實際耗時 分鐘 planning 計畫40 estimate 估計這個任務需要多少時間 40development 開發770 analysis 需求分析 包括學習新技術 200 design spec ...

第二次實踐作業

要求 推薦apache或nginx,要求標明映象作者資訊,安裝必要的工具以方便維護 設定你自己的web存放目錄,安全起見,請將預設的監聽埠80更改為你自定義的埠,並且宣告暴露的埠,容器啟動時,能直接進入web 的存放目錄。將監聽的埠號 listen 從80改為2049 web預設目錄 root 從 ...

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

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