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

看板Programming作者 ( ̄︿ ̄)時間13年前 (2012/09/08 21:56), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串2/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? 我想應該是這樣的 global variable如下 int mult, zero_time; struct element{ float value; int time; } arry[n]; INITIAL(){ for(int i = 0 ; i < n ; i++) arry[i].value = 0; mult = 1; zero_time = 0; } write(k,m){ arry[k].value = m / mult; arry[k].time = zero_time; } read(k){ return (arry[k].time != zero_time? 0 : arry[k].value*mult); } multiplyall(n){ if(!n) return ; mult *= n; } ZEROALL(){ zero_time ++; } 題目說 multiplyall(n) 若n=0時則回傳error的用意應該是 當執行過mult=0後,之後再執行multplyall就無意義了吧...再怎麼樣結果都會是0!! 所以用一個時間去判斷是否執行過zeroall就好了! 這是小弟胡亂猜想的解法,有錯請鞭!!XD -- 複製下面藍色區域並且貼上會斷線,請勿嘗試唷^_< qqqqqqqqqqqqqg y -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.243.51.73 ※ 編輯: perry0627 來自: 111.243.51.73 (09/08 22:08)

09/09 09:54, , 1F
zeroall記得初始化 mult = 1
09/09 09:54, 1F

09/09 09:54, , 2F
執行過zeroall還是可以write/read
09/09 09:54, 2F
文章代碼(AID): #1GIqwSpA (Programming)
文章代碼(AID): #1GIqwSpA (Programming)