看板 Programming 關於我們 聯絡資訊
※ 引述《wsx02 ()》之銘言: : http://ppt.cc/71it : 大意是說 呼叫multiplyall(n)會把陣列所有的元素都乘以n 但只花O(1) : 然後(b)提到的zeroall()我想應該就呼叫multiplyall(0)就可以了吧? : 請問multiplyall(n)應該用怎樣的設計方式 讓他只花O(1)呢? : 謝謝! : 我自己偷吃步的想法是 雖然題目說要改變陣列中全部的element 可是沒說要全部印出來 : 只說這個陣列要能支援initial(),write(k,m),read(k),multiplyall(n)而已 : 不知道可不可以令一個全域變數temp 把multiplyall(n)的n指定給temp : 當陣列要read的時候把element乘以temp? 不是偷吃步的方法啊,這就是設計一組資料結構: a) 用大概C的語言,這個陣列起碼包含一些全域變數: double a[]; long long len = N; double mul; void INITIAL() { a = (double*)malloc(sizeof(double) * len); mul = 1; } void multiplyall(double n) { if (abs(n) < 0.000001) exit(ERROR); mul *= n; } double read(long long k) { return a[k] * mul; } void write(long long k, double m) { a[k] = m / mul; //所以不可以multiplyall(0)把 mul 設定為0. } 至於 ZEROALL() 嘛, 有點難. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.226.94.15
bibo9901:calloc ? 118.169.158.96 09/08 00:14
yauhh:回答這一題,用calloc是犯規的 36.226.94.15 09/08 00:40
wsx02:謝謝 114.42.91.45 09/08 20:22
MOONRAKER:何不用一個flag來做zeroall 114.45.202.196 09/09 02:53
MOONRAKER:就像邏輯電路裡的reset一樣 114.45.202.196 09/09 02:53
yauhh:不行. zeroall()然後write(k,m)就破功 36.226.101.187 09/09 04:49
DJWS:MOONRAKER說的是可以做到的 36.225.135.221 09/09 09:49
DJWS:只是因為這一題並不是針對邏輯電路而已... 36.225.135.221 09/09 09:52
MOONRAKER:對喔,程式中絕不可能達到相同效果。 114.45.202.196 09/09 11:42