Re: [請益] Amazon online test已刪文

看板Soft_Job作者 (Purple )時間11年前 (2013/03/24 22:46), 編輯推噓4(404)
留言8則, 7人參與, 最新討論串3/4 (看更多)
: 1. 給一個int array, 再給一個S, 請利用array 內的東西組成S, 如果組不出來 : 回傳-1 : EX1: {1,3,5}, S= 11 : A: 3; --> 3 = 5+5+1 : EX2: {5, 5, 5, 5, 5, 5}, S=11 : A: -1; : int mincoins(int a[], int N, int S) : { : // N is length of a[] : } --------------------------------------------- int mincoins(int a[], int N, int S); int main(int argc, const char * argv[]) { int n = 3; int a[3] = {5, 3, 1}; int s = 13; int answer = mincoins(a, n, s); if (answer == -1) { printf("not found"); } else { printf("found it:%d",answer); } return 0; } int mincoins(int a[], int N, int S) { for (int i = 0; i < N; i++) { int t = a[i]; int r = S - t; if (r == 0) { return t; } else if (r > 0) { if (mincoins(a, N, r) > 0) { return t; } } } return -1; } ----------------------------------------------- : 2. 取 int 的 1's 補數 : EX1: 50 -> 110010 : A: 13 -> 001101 : EX2: 100 -> 1100100 : 27 -> 0011011 : int complement (int n) : { : } ----------------------------------------------- int complement (int n); int main(int argc, const char * argv[]) { int input = 50; int output = complement(input); printf("Answer:%d",output); return 0; } int complement (int n) { int t = 1; while (t < n) { t = t * 2; } return t - n - 1; } ----------------------------------------------- 跪求第一題最佳化...用了很差的方法 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.94.196

03/24 23:44, , 1F
return ~n; 應該就KO了!
03/24 23:44, 1F

03/24 23:45, , 2F
用 取餘數 來做 如何?
03/24 23:45, 2F

03/25 00:09, , 3F
好久沒寫C了...
03/25 00:09, 3F

03/25 00:10, , 4F
Answer 2: n^(Integer.highestOneBit(n) << 1) - 1
03/25 00:10, 4F

03/25 09:55, , 5F
哈 1樓說的也通唷XD
03/25 09:55, 5F

03/25 13:02, , 6F
第二題不是取1's嗎? 一樓的解法應該是2's
03/25 13:02, 6F

03/25 13:22, , 7F
題2要小心 Integer.MAX_VALUE
03/25 13:22, 7F

03/25 13:29, , 8F
原PO的寫法只適用部分範圍的int值.
03/25 13:29, 8F
文章代碼(AID): #1HJn7ZVT (Soft_Job)
文章代碼(AID): #1HJn7ZVT (Soft_Job)