[閒聊] 昨天下課
有些同學有問一些不錯的問題
不過後來我也忘記講了 就在這邊講一下
1) random似乎不夠亂?
昨天的做法是
for(int i=0; i<N; ++i){
int j = rand() % N; //產生 0 ~ N-1 之間的亂數
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
所以可能的變化是N的N次方 (N^N)
不是N!的倍數,所以每個數在每個位置的出現機率不同
比較好的做法是
for(int i=0; i<N; ++i){
int j = (rand() % (N-i)) + i; //產生 i ~ N-1 之間的亂數
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
這樣每個地方出現的機率就相同了
2) this 在C++和C#的用法不同?
在複數那個例子中,加法是這樣寫的
Complex add(Complex c)
{
Complex ret; //to be returned
ret.real = (*this).real + c.real;
ret.imag = (*this).imag + c.imag;
return ret;
}
但是到了C#的Hello world程式 卻是這樣寫的
public void button1_Click(object sender, EventArgs e)
{
this.label1.Text = "World";
}
為什麼在C++多了一個奇怪的 * 呢?
因為在C++裡,this這個東西是指標(pointer)
而C#裡面,沒有指標這種東西 (除非用unsafe mode)
然後在新鮮人課程中,我們沒有打算要講指標這玩意XDD
所以如果你看不懂的話,也是沒什麼關係
長大之後就會懂了。
--
如果上面都看不懂的話
其實也沒什麼關係
昨天只要聽懂ptt和縮排我就心滿意足了XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.166.8.201
推
06/08 17:34, , 1F
06/08 17:34, 1F
推
06/08 17:51, , 2F
06/08 17:51, 2F
→
06/08 19:34, , 3F
06/08 19:34, 3F
推
06/08 22:05, , 4F
06/08 22:05, 4F
推
06/09 21:03, , 5F
06/09 21:03, 5F
推
06/10 02:19, , 6F
06/10 02:19, 6F