《编程之美——bczm_02.doc》由会员分享,可在线阅读,更多相关《编程之美——bczm_02.doc(16页珍藏版)》请在文库网上搜索。
1、第 2 章数 字 之 魅数字中的技巧代码清单 2-1int Count(BYTE v)int num = 0;while(v)if(v % 2 = 1)num+;v = v/ 2; return num;代码清单 2-2int Count(BYTE v)int num = 0;while(v)num += v v = 1;return num;代码清单 2-3int Count(BYTE v)int num = 0;while(v)v num+;return num;第 2 章 数字之谜 数字中的技巧编程之美 微软技术面试心得118代码清单 2-4int Count(BYTE v)int nu
2、m = 0;switch (v)case 0x0:num = 0;break;case 0x1:case 0x2:case 0x4:case 0x8:case 0x10:case 0x20:case 0x40:case 0x80:num = 1;break;case 0x3:case 0x6:case 0xc:case 0x18:case 0x30:case 0x60:case 0xc0:num = 2;break;/.return num; 代码清单 2-5/* 预定义的结果表 */int countTable256 =0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3,
3、2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3,3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3,4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4,3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3,4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4
4、, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6,6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4,5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3,4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5,
5、 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4,4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6,7, 6, 7, 7, 8;int Count(BYTE v)编程之美 微软技术面试心得119/check parameterreturn countTablev;代码清单 2-6ret = 0;for(i = 1; i = 1;Ret += N;return Ret;代码清单 2-8Type Find(Type* ID, int N)Type candidate;int nTime
6、s, i;for(i = nTimes = 0; i p ? Sa.Append(Si) : Sb.Append(Si)/ 将 p加入较小的组,可以避免分组失败,也使分组/ 更均匀,提 高 效 率 length Sa delta)Vmid = Vmin + (Vmax - Vmin) * 0.5;if(f(arr, N, Vmid) = K)Vmin = Vmid;第 2 章 数字之谜 数字中的技巧编程之美 微软技术面试心得122elseVmax = Vmid;代码清单 2-13if(X h0)h0 = X;p = 0;while(p = K) break;if(q = 0; v-)sumCo
7、unt += countv;if(sumCount = K)break;return v;代码清单 2-15BigInt gcd(BigInt x, BigInt y)if(x 1, y 1) 1, y);elseif(IsEven(y)return gcd(x, y 1);elsereturn gcd(y, x - y);代码清单 2-17/ 初始化for(i = 0; i 0)BigInt(k + j) % N = BigIntk;BigInt(k + j) % N.push_back(i);if(flag = false) NoUpdate+;else NoUpdate=0;第 2 章
8、数字之谜 数字中的技巧编程之美 微软技术面试心得124/ 如果 经过一个循环节都没能对 BigInt进行更新,就是无解,跳出。/ 或者 BigInt0 != NULL,已经找到解,也跳出。if(NoUpdate = N | BigInt0.size() 0)break;if(BigInt0.size() = 0)/ M not existelse/ Find N * M = BigInt0 代码清单 2-18int Fibonacci(int n)if(n = 1)if (n tmp *= tmp;int Fibonacci(int n)Matrix an = MatrixPow(A, n -
9、 1); / A的值 就是上面求解出来的return F1* an(0, 0) + F0 * an(1, 0); / 返回 Fn编程之美 微软技术面试心得125代码清单 2-20(max, min) Search(arr, b, e)if(e - b maxR)maxV = maxL;elsemaxV = maxR;if(minL tmp)fMinDiff = tmp;return fMinDiff;代码清单 2-22double MinDifference(double arr, int n)if(n tmp)fMinDiff = tmp;return fMinDiff; 代码清单 2-23:伪代码for(i = 0, j = n - 1; i maximum)maximum = sum;return maximum;代码清单 2-25int MaxSum(int* A, int n)int maximum = -INF;int sum;for(int i = 0; i n; i+)sum = 0;for(int j = i; j n; j+)