我正在經歷Bjarne Stroustrup的「使用C++編程原則和實踐」。我在第4章,行使4.界限和整數
的鍛鍊; Tibial如下:
寫一個程序,玩數字猜謎遊戲。用戶認爲數字在1到100之間,程序會提出問題來確定數字是什麼(例如,「您的數字是否小於50?」)。在詢問不超過七個問題後,你的程序應該能夠識別這個數字。提示:使用<和< =運算符和if-else結構。
現在,這是偉大的,我已經設法實現這一罰款。
我以爲我會嘗試和推動自己,嘗試和實現這個使用循環,並調整每次下限或上限。
這裏是我的代碼:
#include "std_lib_facilities.h"
int main(){
int count = 0;
int lowerBound = 0;
int upperBound = 100;
string userInput = "";
while (lowerBound != upperBound){
// Increment count
++count;
int halfRange = 0;
// Make halfRange a while number, round up if any decimal portion.
double range = (upperBound - lowerBound)/2;
int rangeDelta = range - (int)range;
if (rangeDelta != 0)
halfRange = (int)range + 1;
else
halfRange = range;
cout << count <<": Is your number between " << lowerBound << " and " << lowerBound + halfRange << "? ";
cin >> userInput;
// Reset the bounds
if (userInput == "y" || userInput == "Y")
upperBound -= halfRange;
else if (userInput == "n" || userInput == "n")
lowerBound += halfRange;
else {
--count;
cout << "Error! Answer could not be understood.";
}
}
cout << "lowerBound: " << lowerBound << ", upperBound: " << upperBound << "\n\n";
cout << "Your number is: " << lowerBound << "\n";
return 0;
}
的問題?那麼,它發生在有小數部分的數字和使用整數除法的情況下,這會導致小數部分丟失。如果你使用數字48,程序會猜到47和47.
任何線索讓我走?我覺得我很接近,但會感謝一些幫助。
感謝,
馬特
聽起來好像這將是作爲'INT halfRange =標準::小區更好地實現本;'。 'ceil'接受一個浮點數並返回。或者,它看起來像'std :: rint'總是向上舍入的風格會做的伎倆,並返回一個整數類型。 – chris
說實話,我會擺脫浮點數*完全*。 – NPE
@NPE,沒錯,在這裏這樣做並不差。 – chris