华为OD机试 - 统计差异值大于相似值二元组个数 - 二进制(Python/JS/C/C++ 新系统 200分)

张开发
2026/5/4 22:10:29 15 分钟阅读
华为OD机试 - 统计差异值大于相似值二元组个数 - 二进制(Python/JS/C/C++ 新系统 200分)
华为OD机试 新系统 统一考试题库清单持续收录中以及考点说明Python/JS/C/C。专栏导读本专栏收录于《华为OD机试真题Python/JS/C/C》。刷的越多抽中的概率越大私信哪吒备注华为OD加入华为OD刷题交流群每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景发现新题目随时更新。六、Python算法源码importsysdefmain():# 读取所有输入并按空白符切分datalist(map(int,sys.stdin.read().split()))ifnotdata:return# 第一个数是 nndata[0]# cnt[len] 表示二进制长度为 len 的数字有多少个# 由于 A[i] 2^30所以长度最大为 30cnt[0]*31# 遍历后面的 n 个数字forxindata[1:1n]:# Python 中 int.bit_length() 可以直接得到二进制长度lengthx.bit_length()cnt[length]1# 总对数total_pairsn*(n-1)//2# 统计二进制长度相同的数对same_len_pairs0forcincnt:same_len_pairsc*(c-1)//2# 答案 总对数 - 同长度对数anstotal_pairs-same_len_pairs# 按题目要求输出不带多余文字print(ans)if__name____main__:main()七、JavaScript算法源码constfsrequire(fs);// 读取标准输入按空白符拆分为数字数组constinputfs.readFileSync(0,utf8).trim().split(/\s/).map(Number);// 如果没有输入直接结束if(input.length0){// 第一个数是 nconstninput[0];// cnt[len] 表示二进制长度为 len 的数字个数constcntnewArray(31).fill(0);// 遍历 n 个数字for(leti1;in;i){letxinput[i];letlen0;// 手动计算二进制长度while(x0){len;xMath.floor(x/2);}cnt[len];}// 总对数 C(n,2)consttotalPairsn*(n-1)/2;// 统计同长度的数对letsameLenPairs0;for(constcofcnt){sameLenPairsc*(c-1)/2;}// 最终答案constanstotalPairs-sameLenPairs;// 输出结果process.stdout.write(String(ans));}八、C算法源码#includestdio.hintmain(){intn;// 读取 n若读取失败直接结束if(scanf(%d,n)!1){return0;}// cnt[len] 表示二进制长度为 len 的数字数量longlongcnt[31]{0};// 读取每个数字并计算其二进制长度for(inti0;in;i){intx;scanf(%d,x);intlen0;while(x0){len;x1;// 右移一位相当于除以 2}cnt[len];}// 总对数longlongtotalPairs1LL*n*(n-1)/2;// 同长度数对数量longlongsameLenPairs0;for(intlen1;len30;len){sameLenPairscnt[len]*(cnt[len]-1)/2;}// 输出答案printf(%lld,totalPairs-sameLenPairs);return0;}九、C算法源码#includeiostream#includevectorusingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cinn;// cnt[len] 表示二进制长度为 len 的数字有多少个vectorlonglongcnt(31,0);for(inti0;in;i){intx;cinx;// 计算二进制长度intlen0;while(x0){len;x1;}cnt[len];}// 总对数longlongtotalPairs1LL*n*(n-1)/2;// 二进制长度相同的数对longlongsameLenPairs0;for(intlen1;len30;len){sameLenPairscnt[len]*(cnt[len]-1)/2;}// 输出答案couttotalPairs-sameLenPairs;return0;}下一篇华为OD机试真题 - 简易内存池Python/JS/C/C 新系统 200分本文收录于华为OD机试真题Python/JS/C/C刷的越多抽中的概率越大私信哪吒备注华为OD加入华为OD刷题交流群每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景发现新题目随时更新。

更多文章