看板 C_and_CPP 關於我們 聯絡資訊
有三個數值 100 200 300,三個位置[A] [B] [C] 玩家隨機從A,B,C選擇一個位置,隨機開出1組數字,剩下的兩組隨機出現在剩下兩個位置 舉例: 玩家選擇位置C,開出數值為200,剩餘數值A為300,B為100 我的寫法是這樣 int iPickedVal[] = {0,0,0}; //索引1表A的值,2表B的值,3表C的值 int iMoney = (rand() % 3 + 1)*100;//隨機產生挑選位置的值 int iPicked = rand() % 3; //隨機挑選一個位置,0=A,1=B,2=C int iWhich = (iPicked/100) - 1; //在iPrize的索引 int iPrize[] = {100,200,300}; for (int i=0; i<3; ) { if (i == iPicked) { iPickedVal[i] = iMoney; iPrize[iWhich] = 0; ++i; } else { bool bFind = false; while (!bFind) { int rIdx = rand() % 3; //選的值還沒被選 且 不等於產生的值才要 if (iPrize[rIdx] != 0 && iPrize[rIdx] != iMoney) { iPickedVal[i] = iPrize[rIdx]; iPrize[rIdx] = 0; ++i; bFind = true; } } } } 我的問題是,這個做法如果運氣差,在while那邊有可能會做很多次,雖然依現在的電腦 速度來說這完全不是問題啦,不過想請問一下,有沒有更漂亮聰明的寫法呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.163.89.216
tkcn:為什麼不直接把3個數字先隨機放進去,意義一樣呀 03/07 23:34
loveme00835:http://codepad.org/pP4wRfiw 03/08 00:14