Re: [問題] 樂透程式結果錯誤

看板C_and_CPP作者 (好人超)時間15年前 (2010/05/21 22:35), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《obelisk0114 (追風箏的孩子)》之銘言: : void lotto() : { : int a[46],i,x; : //srand((int)time(NULL)); : for(i=0;i<46;i++) : a[i]=i+1; : for(i=0;i<6;i++) : { : //x=(rand()%(46-i))+1; : x=int(double(rand())/RAND_MAX*(46-i)+1); : swap(a[x],a[46-i]); : cout<<a[46-i]<<" "; : count[a[46-i]]++; : } : cout<< endl; : } 這個函式有個重要的錯誤 a[46] 可用的是 a[0] 至 a[45] 但在迴圈裡, i 是 0 至 5 那麼 a[46-i] 就會存取到 a[46] 而它的值是什麼鬼,並沒有人知道 所以會有非預期的結果也是很合邏輯的 XD 先修正這個問題,再看看結果正不正確吧 (話說我用 Visual Studio 會跑出 stack corrupted... 所以才注意到有問題) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.171.46 ※ 編輯: james732 來自: 140.117.171.46 (05/21 22:38)

05/21 22:39, , 1F
唔,套錯顏色了,懶得改了...
05/21 22:39, 1F

05/21 22:43, , 2F
哈哈~~看得懂就好啦XD
05/21 22:43, 2F

05/22 17:05, , 3F
所以我只要將a[46-i]改為a[45-i]就可以了?
05/22 17:05, 3F
文章代碼(AID): #1BzfeRHx (C_and_CPP)
文章代碼(AID): #1BzfeRHx (C_and_CPP)