2017-09-24 6 views
0

私は学校のHILOゲームで、数字が高いか低いかを尋ねてユーザーの数を推測しています。私はそれが正しいと思うところで働くコードを持っているが、私はまた、ユーザーが "欺く"ときに数字が推測されるが、ユーザーは再び高いか低いかを選択する必要がある。 これは私が私のコードのために持っているものです。数字が見つからないときにHILOゲーム

void GuessNumber(int lowVal, int highVal) 
    { 
     int midVal = 0; 
     char userAnswer = '-'; 

     midVal = (highVal + lowVal)/2; 

     cout << "Is it " << midVal << " (l,y,h)? " << endl; 
     cin >> userAnswer; 

     if ((userAnswer != 'l') && (userAnswer != 'h')) 
     { 
     cout << "Your number is " << midVal << endl; 
     } 
     else { 
     if (userAnswer == 'h') 
      { 
      GuessNumber(lowVal, midVal); 
      } 
      else if (userAnswer == 'l') 
      { 
      GuessNumber(midVal, highVal); 
      } 
      } 

      return; 
      } 

答えて

2

あなたが知っていない場合を除きあなたはユーザー低/高に尋ねるべきではありません。したがって、あなたが不正を検出できる唯一の時間は、答えが2つの値(NまたはN + 1)のいずれかであることを知っているときで、ユーザーにNと答えた場合、より高いと言う)。

あなたはすでに正確な答えを知っている(ユーザーはあなたを騙せない、答えを知っていることだけを伝える)か、少なくとも3つの可能な回答が残っているため、心配する価値はありません応答が正しいかもしれない)。

+0

ユーザーが30を選択し、プログラムの最後に彼の番号が30で、ユーザーが低または高を選択するかどうか尋ねられると、オプションが不足したときにプログラムは "あなたを欺いた"と印刷する必要があります。それが意味をなさないかどうかわかりません。 –

+0

知っているときにユーザーに質問するのはなぜですか?あなたがそれを主張するならば、答えが30で、それが30かどうかを尋ね、彼らが「はい」と答えることがわからない場合は、「あなたはだまされました」と答えてください。言い換えれば、解空間が空になると、彼らはだまされた。 –

+0

John Zwinck、あなたの応答に感謝します。私はそれが私がやろうとしているものかもしれないと思います。それが空になったときに "あなたを騙した"印字する。どのように私はそれを確認することができます。 (私はそれを行う必要がある限り、課題はそれを必要とする) –

関連する問題