C/C++ でバイナリ アルゴリズムを書くのに問題があります。
私の質問はそのようなものです:
バイナリ アルゴリズムを適用して、数字当てゲームで 1 から 100 までの数字を検索します。
ユーザーは、推測が正しければ「y」、推測が高すぎる場合は「h」、推測が低すぎる場合は「l」で応答します。
適用する気はありません。誰かがコードの例を教えてください。
C/C++ でバイナリ アルゴリズムを書くのに問題があります。
私の質問はそのようなものです:
バイナリ アルゴリズムを適用して、数字当てゲームで 1 から 100 までの数字を検索します。
ユーザーは、推測が正しければ「y」、推測が高すぎる場合は「h」、推測が低すぎる場合は「l」で応答します。
適用する気はありません。誰かがコードの例を教えてください。
ここに詳細な手順とさまざまな実装があります。
int low = 1;
int high = 100;
while (low <= high) {
int mid = (low + high) / 2;
char answer = evaluateGuess(mid); //return l, h or y;
if ('y'==answer) {
return mid;
}
if ('l' == answer) {
low = mid + 1;
} else {
high = mid - 1;
}
}
// If you get here the human player lied and the answer wasn't in [1..100]
二分探索を意味していると思います。ウィキペディアにはたくさんの情報があります。また、stl を使用できるかどうかも指定していません。
基本的な疑似コードは
min := 1;
max := N; {array size: var A : array [1..N] of integer}
repeat
mid := (min + max) div 2;
if x > A[mid] then
min := mid + 1
else
max := mid - 1;
until (A[mid] = x) or (min > max);
したがって、あなたの場合、最小は0、最大は100で、上記のアルゴリズムをユーザー入力をサポートするように変更できます。必要なのは、配列の比較チェックではなく、ユーザー入力をチェックすることだけです。
min := 1;
max := 100;
repeat
mid := (min + max) div 2;
print mid;
c := getChar();
if c == 'h' then
min := mid + 1
else if c == 'l'
max := mid - 1;
else if c == 'y'
return mid
until (min > max);
ただし、さらにヘルプが必要な場合は、これまでにコードを投稿する必要があります。
getRandomNumber(lower, upper){
return random number between lower and upper;
}
main(){
lower = 0;
upper = 101;
num = getRandomNumber(lower, upper);
response = askUser(num);
while(response != Y){
if (response==H)
//if secret is higher than num
lower = num;
else
//if secret is lower than num
upper = num;
num = getRandomNumber (lower, upper);
response = askUser(num);
}
}