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

伊莉討論區

搜索
感激所有對伊莉作出奉獻的人發表文章前請先閱讀相關版規你準備好成為出色的版主了嗎?
juliaofficefatejulia人妖259luxuphotosho
無碼 ge憑夜ノ村自走棋cawd 689不思議の四合院裡日光女神

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

[繁]精靈幻想記 第二

[繁]Love Live! Super

[繁]轉生貴族憑鑑定技

[簡]莫名成為邪龍的五

[繁]再見龍生,你好人

[繁]Re:從零開始的異
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 2250|回復: 4
打印上一主題下一主題

[作業]1A2b的設計問題[複製鏈接]

Rank: 1

帖子
99
積分
180 點
潛水值
25171 米
跳轉到指定樓層
樓主
發表於 2016-12-2 05:20 AM|只看該作者|倒序瀏覽
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
請大家幫幫忙,學生要做科展,但想要將內容用電腦呈現,他們想要做7個數字的1A2B,但又多了兩個條件,也就是左邊正確就是C,右邊正確就是D,但第一個只能判斷右邊與第七個只能判斷左邊,請大家幫幫忙,要如何寫,謝謝大家
分享分享0收藏收藏0支持支持0
如果瀏覽伊莉時速度太慢或無法連接,可以使用其他分流瀏覽伊莉,www01.eyny.com(02,03)。

使用道具檢舉

Rank: 1

帖子
9
積分
31 點
潛水值
20870 米
頭香
發表於 2016-12-2 09:44 AM|只看該作者
本帖最後由 kiwis 於 2016-12-2 09:52 AM 編輯

最簡單的就是跑兩個迴圈整串下去測吧。
  1. int max_length(7);

  2. void check(char* answer, char* user_input)
  3. {
  4.         unsigned char A(0);
  5.         unsigned char B(0);
  6.         unsigned char C(0);
  7.         unsigned char D(0);

  8.         for(int i(0); i<max_length; ++i)
  9.         {
  10.                 for(int j(0); j<max_length; ++j)
  11.                 {
  12.                         if(user_input[j] == answer[i])
  13.                         {
  14.                                 if(i==j)
  15.                                 {
  16.                                         A++;
  17.                                         break;
  18.                                 }
  19.                                 if(i!=j)
  20.                                         B++;
  21.                                 if(i>j)
  22.                                 {
  23.                                         C++;
  24.                                         break;
  25.                                 }
  26.                                 if(i<j)
  27.                                 {
  28.                                         D++;
  29.                                         break;
  30.                                 }
  31.                         }
  32.                 }
  33.         }
  34.         // 把 A B C D 印出來或看要做甚麼處理
  35. }
複製代碼
要注意的地方:
1. 電腦產生的答案假設已經做好了(隨機產生7個數字,不重複)
2. 玩家輸入已經處理完成(不重複的一串7個數字)
3. 輸入為字串模式
4. 沒做任何檢查,這個讓各位自己做 : p

  1.     //呼叫方式:
  2.     char* answer =     "0123456";
  3.     char* user_input = "2049367";

  4.     check(answer, user_input);
複製代碼


...
瀏覽完整內容,請先 註冊登入會員
所有積分大於負-100的壞孩子,將可獲得重新機會成為懲罰生,權限跟幼兒生一樣。

使用道具檢舉

Rank: 1

帖子
9
積分
31 點
潛水值
20870 米
3
發表於 2016-12-2 06:20 PM|只看該作者
若對尊貴或贊助會員有任何疑問,歡迎向我們查詢。我們的即時通或MSN: admin@eyny.com
本帖最後由 kiwis 於 2016-12-2 06:35 PM 編輯

嗯~另外一套想法,執行效率會好一點,但是會使用額外的記憶體...

  1. int char_set[10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};

  2.     char* answer =     "0123456";
  3.     char* user_input = "2049367";

  4.     unsigned char A(0);
  5.     unsigned char B(0);
  6.     unsigned char C(0);
  7.     unsigned char D(0);

  8.     // char_set 的 index = user_input[x] 的值,char_set[x] = user_input 的 index
  9.     // -1 為該數字未被使用
  10.     for(int x(0); x<7; x++)
  11.     {
  12.         check02++;
  13.         char_set[ user_input[x]-48 ] = x;  // ascii code - 48 = 數字
  14.     }


  15.     for(int i(0); i<7; ++i)
  16.     {
  17.         check02++;

  18.         if( char_set[ answer[i]-48 ] != -1)
  19.         {
  20.             if( char_set[ answer[i]-48 ] == i )
  21.                 ++A;
  22.             else
  23.             {
  24.                 ++B;

  25.                 if(char_set[ answer[i]-48 ] < i)
  26.                     ++C;
  27.                 if(char_set[ answer[i]-48 ] > i)
  28.                     ++D;
  29.             }
  30.         }
  31.     }
複製代碼


迴圈執行次數從最大 7*7 降到 固定 7*2,
但是多使用了一些記憶體(char_set[10]): p


...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 2Rank: 2

帖子
245
積分
201 點
潛水值
13582 米
4
發表於 2016-12-3 12:01 AM|只看該作者
本帖最後由 scottcheng 於 2016-12-3 12:06 AM 編輯
  1. void check(char *answer, char *input)
  2. {
  3.     char *pch = input;
  4.     char *found;
  5.     int da, di;
  6.     int A, B, C, D;

  7.     A = B = C = D = 0;

  8.     while (*pch != 0) {
  9.         found = strchr(answer, *pch);
  10.         if (found) {
  11.           da = found - answer;
  12.           di = pch  - input;

  13.           if (da == di) {
  14.              A++;
  15.              pch++;
  16.              continue;
  17.           } else
  18.              B++;

  19.           if (da < di)
  20.              C++;
  21.           else
  22.              D++;
  23.         }
  24.         pch++;
  25.     }

  26.     print_f("%dA%dB%dC%dD\n", A, B, C, D);
  27. }
複製代碼
隨便寫寫, 用樓上call法, 其實寫法應該也差不了多少, 你參考看看!...
瀏覽完整內容,請先 註冊登入會員
無欲則剛, 有欲則子孫滿堂. 看來我只比無好一點點!

使用道具檢舉

Rank: 1

帖子
99
積分
180 點
潛水值
25171 米
5
發表於 2016-12-3 08:41 PM|只看該作者
非常感謝大大們的幫忙,我會試試看,謝謝你們了~
太感動了~




使用道具檢舉

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

Powered by Discuz!

© Comsenz Inc.

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