找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
請尊重及感激所有版主付出和奉獻尊貴會員無限看帖不用回覆安全提問(回答) 和 永久尊貴會員 事宜
mg火影fate銀魂geoffice按摩
tell me 俠客風雲輔仁小倉優子snis 937隻狼穿書黑化

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

[簡]單人房、日照一般

[繁]老夫老妻重返青春

[繁]從Lv2開始開外掛

[繁]Re:Monster 04-

[簡]狼與辛香料 Merch

[簡]終末的火車前往何
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 1624|回復: 5
打印上一主題下一主題

[問題]數獨[複製鏈接]

Rank: 1

帖子
300
積分
193 點
潛水值
11150 米
跳轉到指定樓層
樓主
發表於 2014-3-13 12:52 AM|只看該作者|倒序瀏覽
本帖最後由 andrew33673367 於 2014-3-14 12:41 AM 編輯

輸入的每一組測試資料均為 9 × 9 的矩陣,且全部為 1~9 的數字,每兩組九宮格之間以一空行作為分隔
輸出說明 :
yes or no
範例輸入 :
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
3 4 5 6 7 8 9 1 2
4 5 6 7 8 9 1 2 3
5 6 7 8 9 1 2 3 4
6 7 8 9 1 2 3 4 5
7 8 9 1 2 3 4 5 6
8 9 1 2 3 4 5 6 7
...
瀏覽完整內容,請先 註冊登入會員

點評

andrew33673367 喔~~ 版主你太神拉 按照你的k<i+3....的改就對了 太感激了拉 果然大大就是不一樣 不過也很感激其他回文解題的大大 謝++  發表於 2014-3-14 01:14 AM
andrew33673367 不用"直"與"橫"的原因是我認為只要個別九宮格法沒過,質與橫就一定不會過  發表於 2014-3-14 01:12 AM
andrew33673367 例如st[0][0]是1 (st[9][9]==9x9的數獨,共9個九宮格),則每一個個別九宮格一定也有一個一,但只會有一個一(so 每個m[h]只會是一),如果有兩個以上就是no  發表於 2014-3-13 11:09 PM
andrew33673367 我的想法是直接採取"個別九宮格"來判斷,先用st[0][0]為基準(也就是九宮左上角的第一個數字),然後一個一個的對個別九宮內的數字  發表於 2014-3-13 11:04 PM
andrew33673367 抱歉 void是多打的  發表於 2014-3-13 11:00 PM
snowflying 感覺你少判斷好幾樣  發表於 2014-3-13 01:51 AM
snowflying aaa() 裡面 k < i + 3 , n < j + 3  發表於 2014-3-13 01:38 AM
snowflying 數獨有 "直"、"橫"、"個別九宮格",這三種都有判斷嗎?  發表於 2014-3-13 01:17 AM
snowflying 為什麼 main 裡面有 void aaa(); ?  發表於 2014-3-13 01:14 AM
snowflying 請包程式碼  發表於 2014-3-13 01:00 AM
分享分享0收藏收藏0支持支持0

使用道具檢舉

皇臾 該用戶已被刪除
頭香
發表於 2014-3-13 08:15 AM|只看該作者
因為main最後要輸出的結果,就是yes,你在前面判斷的很辛苦,但最終總是輸出yes

點評

snowflying 程式碼有 cout "no" 與 return 0 唷,所以應該是判斷方面就有錯了  發表於 2014-3-13 12:09 PM

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
328
積分
2651 點
潛水值
10849 米
3
發表於 2014-3-13 12:40 PM|只看該作者
  1. **********************************************************************************/
  2. /*  Problem: a016 "數獨(SUDOKU)"                                                */
  3. /*  Language: C (844 Bytes)                                                       */
  4. /*  Result: AC(2ms, 240KB) judge by zeroserver@ZeroJudge                          */
  5. /*  Author: edisonx at 2011-07-11 16:43:34                                        */
  6. /**********************************************************************************/


  7. #include <stdio.h>
  8. int table[9][9];
  9. int checkrow_col();
  10. int check_block();
  11. int check();

  12. int main()
  13. {
  14.         int i, j;
  15.         while(scanf("%d", &table[0][0])==1){
  16.                 for(i=1; i!=9; ++i) scanf("%d", &table[0][i]);
  17.                 for(i=1; i!=9; ++i)
  18.                         for(j=0; j!=9; ++j) scanf("%d", &table[i][j]);
  19.                 puts( (check() ? "yes" : "no"));
  20.         }
  21.         return 0;
  22. }

  23. int check()
  24. {
  25.         if(checkrow_col()) return check_block();
  26.         return 0;
  27. }

  28. int checkrow_col()
  29. {
  30.         int i, j, cnt1, cnt2;
  31.         for(i=0; i!=9; ++i){
  32.                 for(cnt1=cnt2=j=0; j!=9; ++j)
  33.                         cnt1+=table[i][j], cnt2+=table[j][i];
  34.                 if(cnt1!=45 || cnt2!=45) return 0;
  35.         }
  36.         return 1;       
  37. }

  38. int check_block()
  39. {
  40.         int i, j, k, l, cnt;
  41.         for(i=0; i!=9; i+=3){
  42.                 for(j=0; j!=9; j+=3){
  43.                         for(k=cnt=0; k!=3; ++k)
  44.                                 for(l=0; l!=3; ++l) cnt+=table[i+k][j+l];
  45.                         if(cnt!=45) return 0;
  46.                 }
  47.         }
  48.         return 1;
  49. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員

點評

EdisonX 的確,這是很妙的偷機的方式,偏偏 AC 就不想搞了。  發表於 2014-3-13 02:08 PM
snowflying 如果全輸入 5 會得到錯誤結果,除非能保證每行每列皆含 1~9 全部數字  發表於 2014-3-13 01:16 PM
如果沒有明天
我想見你最後一面
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
328
積分
2651 點
潛水值
10849 米
4
發表於 2014-3-13 02:15 PM|只看該作者
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
改了一下,不用偷雞方式,這樣就沒問題了,而且速度更快。
  1. /**********************************************************************************/
  2. /*  Problem: a016 "數獨(SUDOKU)"                                                */
  3. /*  Language: C (905 Bytes)                                                       */
  4. /*  Result: AC(0ms, 280KB) judge by this@ZeroJudge                                */
  5. /*  Author: edisonx at 2014-03-13 14:14:20                                        */
  6. /**********************************************************************************/


  7. #include <stdio.h>
  8. int table[9][9];
  9. int checkrow_col();
  10. int check_block();
  11. int check();

  12. int main()
  13. {
  14.         int i, j;
  15.         while(scanf("%d", &table[0][0])==1){
  16.                 for(i=1; i!=9; ++i) scanf("%d", &table[0][i]);
  17.                 for(i=1; i!=9; ++i)
  18.                         for(j=0; j!=9; ++j) scanf("%d", &table[i][j]);
  19.                 puts( (check() ? "yes" : "no"));
  20.         }
  21.         return 0;
  22. }

  23. int check()
  24. {
  25.         if(checkrow_col()) return check_block();
  26.         return 0;
  27. }

  28. int checkrow_col()
  29. {
  30.         int i, j;
  31.         unsigned rst1=0 , rst2=0;
  32.         for(i=0; i!=9; ++i){
  33.                 for(rst1=rst2=j=0; j!=9; ++j)
  34.                         rst1|=(1U<<table[i][j]), rst2|=(1U<<table[j][i]);
  35.                 if(rst1!=0x3FE || rst2!=0x3FE) return 0;
  36.         }
  37.         return 1;        
  38. }

  39. int check_block()
  40. {
  41.         int i, j, k, l;
  42.         unsigned rst;
  43.         for(i=0; i!=9; i+=3){
  44.                 for(j=0; j!=9; j+=3){
  45.                         for(k=rst=0; k!=3; ++k)
  46.                                 for(l=0; l!=3; ++l) rst|=(1U<<table[i+k][j+l]);
  47.                         if(rst!=0x3FE) return 0;
  48.                 }
  49.         }
  50.         return 1;
  51. }
複製代碼
...
瀏覽完整內容,請先 註冊登入會員

點評

andrew33673367 謝謝你提供正確解答,小弟由衷的感激,但小弟我只是個學不到半年的新手,所以看大大妳的程式碼看得好辛苦啊,但還是謝謝你  發表於 2014-3-14 12:33 AM
如果沒有明天
我想見你最後一面
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

abz53378 該用戶已被刪除
5
發表於 2014-3-16 02:02 AM|只看該作者
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。
EdisonX 發表於 2014-3-13 02:15 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

改了一下,不用偷雞方式,這樣就沒問題了,而且速度更快。

請問一下 1U<<table[j] 代表的什麼意思啊
謝謝!




分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
328
積分
2651 點
潛水值
10849 米
6
發表於 2014-3-16 05:41 AM|只看該作者
本帖最後由 EdisonX 於 2014-3-16 05:41 AM 編輯
abz53378 發表於 2014-3-16 02:02 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

請問一下 1U

這裡要以二進制來看。

(1) 1U << n
...
瀏覽完整內容,請先 註冊登入會員
如果沒有明天
我想見你最後一面
成為伊莉的版主,你將獲得更高級和無限的權限。把你感興趣的版面一步步地發展和豐盛,那種滿足感等著你來嚐嚐喔。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部