Re: [問題] 樂透程式結果錯誤
※ 引述《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
05/21 22:43, 2F
推
05/22 17:05, , 3F
05/22 17:05, 3F
討論串 (同標題文章)