頁:
[1]
1A2b的設計問題
請大家幫幫忙,學生要做科展,但想要將內容用電腦呈現,他們想要做7個數字的1A2B,但又多了兩個條件,也就是左邊正確就是C,右邊正確就是D,但第一個只能判斷右邊與第七個只能判斷左邊,請大家幫幫忙,要如何寫,謝謝大家<div></div> 本帖最後由 kiwis 於 2016-12-2 09:52 AM 編輯最簡單的就是跑兩個迴圈整串下去測吧。int max_length(7);
void check(char* answer, char* user_input)
{
unsigned char A(0);
unsigned char B(0);
unsigned char C(0);
unsigned char D(0);
for(int i(0); i<max_length; ++i)
{
for(int j(0); j<max_length; ++j)
{
if(user_input == answer)
{
if(i==j)
{
A++;
break;
}
if(i!=j)
B++;
if(i>j)
{
C++;
break;
}
if(i<j)
{
D++;
break;
}
}
}
}
// 把 A B C D 印出來或看要做甚麼處理
}要注意的地方:
1. 電腦產生的答案假設已經做好了(隨機產生7個數字,不重複)
2. 玩家輸入已經處理完成(不重複的一串7個數字)
3. 輸入為字串模式
4. 沒做任何檢查,這個讓各位自己做 : p
//呼叫方式:
char* answer = "0123456";
char* user_input = "2049367";
check(answer, user_input);
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 本帖最後由 kiwis 於 2016-12-2 06:35 PM 編輯
嗯~另外一套想法,執行效率會好一點,但是會使用額外的記憶體...
int char_set = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
char* answer = "0123456";
char* user_input = "2049367";
unsigned char A(0);
unsigned char B(0);
unsigned char C(0);
unsigned char D(0);
// char_set 的 index = user_input 的值,char_set = user_input 的 index
// -1 為該數字未被使用
for(int x(0); x<7; x++)
{
check02++;
char_set[ user_input-48 ] = x; // ascii code - 48 = 數字
}
for(int i(0); i<7; ++i)
{
check02++;
if( char_set[ answer-48 ] != -1)
{
if( char_set[ answer-48 ] == i )
++A;
else
{
++B;
if(char_set[ answer-48 ] < i)
++C;
if(char_set[ answer-48 ] > i)
++D;
}
}
}
迴圈執行次數從最大 7*7 降到 固定 7*2,
但是多使用了一些記憶體(char_set): p
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 本帖最後由 scottcheng 於 2016-12-3 12:06 AM 編輯
void check(char *answer, char *input)
{
char *pch = input;
char *found;
int da, di;
int A, B, C, D;
A = B = C = D = 0;
while (*pch != 0) {
found = strchr(answer, *pch);
if (found) {
da = found - answer;
di = pch - input;
if (da == di) {
A++;
pch++;
continue;
} else
B++;
if (da < di)
C++;
else
D++;
}
pch++;
}
print_f("%dA%dB%dC%dD\n", A, B, C, D);
}隨便寫寫, 用樓上call法, 其實寫法應該也差不了多少, 你參考看看!...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 非常感謝大大們的幫忙,我會試試看,謝謝你們了~
太感動了~<br><br><br><br><br><div></div>
頁:
[1]