Post by huangno1 on Feb 25, 2017 7:34:37 GMT -8
程式說明
猜數字!假設只有四位數字 (4 digits),每位數字均介於1~9且皆相異 (digits are distinct and in [1, 9])。若猜測答案和正確答案的某一位數字相符且位置相符,記為A,若數字相符但位置不符,記為B。
若正確答案為 1234 (1234 is the answer),下表為猜測答案的判定結果。
猜測答案 (guess) A/B
5678 0A0B
1567 1A0B
1243 2A2B
4321 0A4B
1234 4A0B
本功能會讓使用者先輸入正確答案 (input the correct answer first),再由使用者進行猜數字遊戲 (then start the guessing procedure)。
(1) 支援函式:GuessDigits()
(1.1) 該函式有兩個參數 ans 和 max_num_guesses,均為整數型態。ans代表標準答案 (ans is the correct answer),max_num_guesses代表最多可以猜幾次。
(1.2) 該函式的回傳值為布林型態 (bool)。
(1.3) 該函式會反覆要求使用者輸入所猜測的數字,輸出 A/B 判定結果。(repeats inputting the guess and outputting ?A?B)
(1.4) 若使用者輸入的猜測答案與正確答案完全相同 (4A0B),結束函式,回傳true。(return true if the guess matches exactly)
(1.5) 若使用者已輸入 max_num_guesses 次但未能猜中正確答案,結束函式,回傳false。(return false after max_num_guesses incorrect guesses)
(2) 主函式功能:
當使用者選擇此功能,他將會先輸入一個四位數字代表正確答案。接著便開始進行猜數字遊戲。若十次之內(含第十次)無法猜中 (10 incorrect guesses),輸出 "Oh, you lose!";若十次內猜中了,輸出 "Great! You got it!"。
提示:使用一維陣列儲存每一位數字並進行比對。
#include <stdio.h>
bool GuessDigits(int answer, int max_num_guesses)
{
constexpr int NumDigits = 4;
int ans[NumDigits] = {0}, guess[NumDigits] = {0};
int x = answer ;
for ( int i = 0 ; i < NumDigits ; i ++ )
{
ans [ i ] = x % 10 ;
x /= 10 ;
}
int num_guess = 0;
do
{
int num;
printf("Guess...>");
scanf("%d", &num);
num_guess += 1;
for (int i=0; i<NumDigits; i+=1)
{
guess = num%10;
num /= 10;
}
int countA = 0, countB = 0;
for (int i=0; i<4; i+=1)
{
for (int j=0; j<4; j+=1)
{
if (ans [ i ] == guess [ j ])
{
if (i == j)
countA += 1;
else
countB += 1;
}
}
}
if (countA == 4)
return 1 ;
else
printf("%dA%dB\n", countA, countB);
}while (num_guess < max_num_guesses);
return false;
}// GuessDigits()
int main()
{
printf("Guess Number\n");
int num = 0;
printf("Set the answer...>");
scanf("%d", &num);
if (GuessDigits ( num , 10 )}
printf("Great! You got it!\n");
else
printf("Oh, you lose!\n");
return 0;
}
猜數字!假設只有四位數字 (4 digits),每位數字均介於1~9且皆相異 (digits are distinct and in [1, 9])。若猜測答案和正確答案的某一位數字相符且位置相符,記為A,若數字相符但位置不符,記為B。
若正確答案為 1234 (1234 is the answer),下表為猜測答案的判定結果。
猜測答案 (guess) A/B
5678 0A0B
1567 1A0B
1243 2A2B
4321 0A4B
1234 4A0B
本功能會讓使用者先輸入正確答案 (input the correct answer first),再由使用者進行猜數字遊戲 (then start the guessing procedure)。
(1) 支援函式:GuessDigits()
(1.1) 該函式有兩個參數 ans 和 max_num_guesses,均為整數型態。ans代表標準答案 (ans is the correct answer),max_num_guesses代表最多可以猜幾次。
(1.2) 該函式的回傳值為布林型態 (bool)。
(1.3) 該函式會反覆要求使用者輸入所猜測的數字,輸出 A/B 判定結果。(repeats inputting the guess and outputting ?A?B)
(1.4) 若使用者輸入的猜測答案與正確答案完全相同 (4A0B),結束函式,回傳true。(return true if the guess matches exactly)
(1.5) 若使用者已輸入 max_num_guesses 次但未能猜中正確答案,結束函式,回傳false。(return false after max_num_guesses incorrect guesses)
(2) 主函式功能:
當使用者選擇此功能,他將會先輸入一個四位數字代表正確答案。接著便開始進行猜數字遊戲。若十次之內(含第十次)無法猜中 (10 incorrect guesses),輸出 "Oh, you lose!";若十次內猜中了,輸出 "Great! You got it!"。
提示:使用一維陣列儲存每一位數字並進行比對。
#include <stdio.h>
bool GuessDigits(int answer, int max_num_guesses)
{
constexpr int NumDigits = 4;
int ans[NumDigits] = {0}, guess[NumDigits] = {0};
int x = answer ;
for ( int i = 0 ; i < NumDigits ; i ++ )
{
ans [ i ] = x % 10 ;
x /= 10 ;
}
int num_guess = 0;
do
{
int num;
printf("Guess...>");
scanf("%d", &num);
num_guess += 1;
for (int i=0; i<NumDigits; i+=1)
{
guess = num%10;
num /= 10;
}
int countA = 0, countB = 0;
for (int i=0; i<4; i+=1)
{
for (int j=0; j<4; j+=1)
{
if (ans [ i ] == guess [ j ])
{
if (i == j)
countA += 1;
else
countB += 1;
}
}
}
if (countA == 4)
return 1 ;
else
printf("%dA%dB\n", countA, countB);
}while (num_guess < max_num_guesses);
return false;
}// GuessDigits()
int main()
{
printf("Guess Number\n");
int num = 0;
printf("Set the answer...>");
scanf("%d", &num);
if (GuessDigits ( num , 10 )}
printf("Great! You got it!\n");
else
printf("Oh, you lose!\n");
return 0;
}