2016-01-23 55 views
-1

我想做一個猜謎遊戲程序,其中用戶認爲1到100之間的數字,然後計算機隨機生成(猜測)1到100之間的數字。然後用戶告訴計算機它們的號碼是否更高(H),更低(L)或相同(Y)作爲猜測數量。我遇到的問題是改變計算機生成及其在猜測的範圍內。修改蘭德()範圍C++

所以我們可以說我的號碼是和計算機生成作爲它的猜測。我會輸入H,表明我的數字高於猜測值。計算機然後更改參數以生成和之間的數字。

int high = 100, low = 1; 
char answer; 

設置我的變量。

srand(time(0)); 

我有這個真正的隨機化一代。

int guess = rand() % high + low; 
cout << "Is your number " << guess << "?\n"; 
cin >> answer; 

生成數,請問如果數字是我在想什麼,然後問我來回答如果是更高,更低或糾正。

然後檢查答案並確定如何更改隨機生成數字的範圍的段。

switch (answer) 
    { 
    case 'H': 
     low = (guess + 1); 
     high = (high - guess); 
     break; 
    case 'L': 
     high = guess; 
     break; 
    default: 
     break; 
    } 

我想我不瞭解的是rand()是如何工作的。就像我整明白

rand() % 100 //range of 0 and 99 
rand() % 100 + 1 // range of 1 and 100 

但我想知道我怎麼可以改變參數,使我得到

rand() % max + min // range of min and max 

,而我不斷調整,爲最大和最小更新值。

+3

你的意思是如果'min = 3'和'max = 10',那麼你需要猜測3到10之間的某個位置?如果是這樣,那麼你只要做'rand()%(max + 1 - min)+ min'。 – Cornstalks

+0

如果可以,請使用更好的RNG,例如[內置於C++ 11中的那些](http://en.cppreference.com/w/cpp/numeric/random)或[Boost](http:// www .boost.org/DOC /庫/ 1_60_0/DOC/HTML/boost_random.html)。 – krlmlr

回答

3

你基本上是在正確的軌道上。使用rand() % n將爲您提供半開範圍[0,n)的值。所以如果你想要0到100之間的數字,使用rand() % 101。當您有最大值和最小值時,nmax - min + 1。這爲您提供了從0開始的一系列值。要獲得從min開始的一系列值,只需將min添加到該值。

+0

如果rand()的範圍不是n的倍數,那麼隨機數不會被均勻分佈。 – krlmlr

+0

@krlmlr - 是的,這就是你對這個問題的評論。 –

+0

你也可以用'rand()'做得更好。請參閱http://c-faq.com/lib/randrange.html以及本網站上的一些重複問題。 – krlmlr