Re: [問題] 設計特殊的陣列

看板Programming作者 (喲)時間13年前 (2012/09/07 23:00), 編輯推噓2(207)
留言9則, 5人參與, 最新討論串1/3 (看更多)
※ 引述《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

09/08 00:14, , 1F
calloc ?
09/08 00:14, 1F

09/08 00:40, , 2F
回答這一題,用calloc是犯規的
09/08 00:40, 2F

09/08 20:22, , 3F
謝謝
09/08 20:22, 3F

09/09 02:53, , 4F
何不用一個flag來做zeroall
09/09 02:53, 4F

09/09 02:53, , 5F
就像邏輯電路裡的reset一樣
09/09 02:53, 5F

09/09 04:49, , 6F
不行. zeroall()然後write(k,m)就破功
09/09 04:49, 6F

09/09 09:49, , 7F
MOONRAKER說的是可以做到的
09/09 09:49, 7F

09/09 09:52, , 8F
只是因為這一題並不是針對邏輯電路而已...
09/09 09:52, 8F

09/09 11:42, , 9F
對喔,程式中絕不可能達到相同效果。
09/09 11:42, 9F
文章代碼(AID): #1GIWlrZp (Programming)
文章代碼(AID): #1GIWlrZp (Programming)