[問題] 不使用乘法的計算與排序問題
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
Q1. 不使用乘法如何有效率計算 X*Y 的結果
Q2. 已知兩個array,裡面的元素都已經是排序好的順序,不使用
教科書裡面的經典的排序方法(如:quick sort, merge sort 等)
把兩個array裡面的所有元素合併到另外一個新的array內
所有元素也是排序後的順序
餵入的資料(Input):
Q1. X, Y 兩個整數,不需考慮overflow的問題
Q2. A[] = {1,3,4}, B[]={2,5,7},二者都可能是動態大小的資料量
預期的正確結果(Expected Output):
Q1. 達成正常乘法的效果,但是用更有效率的方法
Q2. C[] = {1,2,3,4,5,7}
錯誤結果(Wrong Output):
N/A
程式碼(Code):(請善用置底文網頁, 記得排版)
抱歉,程式能力不好,想來這邊請教"想法"就好
Q1. 我有兩個想法
法1. X*Y = X + X + ...+ X,自加Y次,所以可以用一個簡單迴圈配合加法完成
法2. 把Y轉成2進位表示,例如 3*12 = 3*(1100) = 3<<3 + 3<<2
所以可以用mask的方式知道Y裡面有那幾個bit是1,便可以對X做位移後加法
不過直接寫起來,code似乎又臭又長 -_-,且如果遇到負數的話不知是否適用?
請益是否有更聰明的方法
Q2. 我起先想到的是空桶排序,設計一個空的array,size = A B array中元素的最大值
例如: X[7]={0}
然後把兩個array裡面每一個元素放到值所相對應的位置
即 X[a[i]] = a[i]; X[b[j]] = b[j];
全部都放好後,把X裡面非0的元素取出來就會是排好的結果
但是,一想完之後發現缺點百出 -_-
1. 如果A B array裡面有0值的元素,這個想法就gg
2. 如果A Barray裡面有重複值的元素,這樣排可能會出錯
補充說明(Supplement):
希望各位大大提供想法即可
如果違反版規,不適合在此發問的話請不吝告知,感謝 ^^
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.161.13.98
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429029731.A.246.html
推
04/15 00:45, , 1F
04/15 00:45, 1F
→
04/15 00:45, , 2F
04/15 00:45, 2F
→
04/15 00:46, , 3F
04/15 00:46, 3F
→
04/15 00:47, , 4F
04/15 00:47, 4F
→
04/15 00:47, , 5F
04/15 00:47, 5F
→
04/15 00:47, , 6F
04/15 00:47, 6F
→
04/15 00:48, , 7F
04/15 00:48, 7F
→
04/15 00:49, , 8F
04/15 00:49, 8F
→
04/15 00:49, , 9F
04/15 00:49, 9F
→
04/15 00:50, , 10F
04/15 00:50, 10F
→
04/15 00:51, , 11F
04/15 00:51, 11F
→
04/15 00:51, , 12F
04/15 00:51, 12F
→
04/15 00:52, , 13F
04/15 00:52, 13F
※ 編輯: signdecoded (118.161.13.98), 04/15/2015 00:52:48
→
04/15 00:54, , 14F
04/15 00:54, 14F
推
04/15 01:05, , 15F
04/15 01:05, 15F
→
04/15 01:06, , 16F
04/15 01:06, 16F
→
04/15 02:10, , 17F
04/15 02:10, 17F
推
04/15 05:46, , 18F
04/15 05:46, 18F
→
04/15 05:48, , 19F
04/15 05:48, 19F
推
04/15 07:13, , 20F
04/15 07:13, 20F
→
04/15 22:17, , 21F
04/15 22:17, 21F
→
04/15 22:17, , 22F
04/15 22:17, 22F
→
04/15 22:59, , 23F
04/15 22:59, 23F
→
04/15 23:00, , 24F
04/15 23:00, 24F
推
04/16 12:28, , 25F
04/16 12:28, 25F
→
04/16 12:29, , 26F
04/16 12:29, 26F
→
04/16 12:31, , 27F
04/16 12:31, 27F
→
04/16 23:17, , 28F
04/16 23:17, 28F
推
04/19 21:22, , 29F
04/19 21:22, 29F
→
04/19 21:22, , 30F
04/19 21:22, 30F
推
04/19 21:33, , 31F
04/19 21:33, 31F
推
08/23 16:21, , 32F
08/23 16:21, 32F