☰
cpp算法题目整理——模拟篇
2026/9/29 9:56:51 网站建设 项目流程

交换数字

题目描述:

编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。

解题思路:

直接swap即可。

位1的个数

题目描述:

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为 汉明重量).)。

解题思路:

可以直接用>>右移,每次右移一位,再和1进行位于运算,如果为真,cnt++;

第二种用Brian Kernighan 算法, 关键步骤在 n &= (n-1),这样可以快速统计n中1的个数。

也可以用.count(),专门用来统计二进制数中的1的个数。

偏蓝

题目描述:

小蓝特别喜欢蓝色。最近,小蓝学习了颜色在计算机中的一种表示方法:用三个 0 至 255 之间的整数(包含 0 和 255)分别表示颜色的红、绿、蓝三个分量。

在这种颜色的表示方法下,小蓝定义了一种颜色是偏蓝的,是指蓝色分量大于红色分量,且蓝色分量大于绿色分量。例如,红、绿、蓝分别为 10、10、11 时是偏蓝的;红、绿、蓝分别为 100、200、200 时不是偏蓝的。

小蓝想知道,有多少种不同的颜色是偏蓝的。两种颜色如果在红、绿、蓝中至少有一个分量值不同,就认为是不同的。

解题思路:

可以直接三层for循环暴力解,当固定蓝色分量为B(B<256)时,R和G必须满足 R,G < B; 则有B * B种,并且从0到256求和即可。

确定翻转的位数

题目描述:

实现一个算法确定将一个二进制整数翻转为另一个二进制整数,需要翻转的位数。介绍如下:

  • 例如将 11101 翻转为 00111,需要翻转的位置为第 1,2 和 4 位置,则需要翻转的位数为 3。

解题思路:

接收的时候用string,然后用bitset<100> b1(s1) 将s1转为二进制数b1,然后用异或^求出两个数之间不同的个数,也就是1,然后用.count()统计二进制数中1的个数。这个主要涉及到进制转换,要用bitset<> name(需要转换的数字或字符串); 还涉及到一个成员函数.count(),是用来统计二进制数字中1的个数。

缩位求和

题目描述:

请你写一个计算机程序,对给定的字符串逐位求和。

解题思路:

暴力点就是直接循环字符串s然后求每一位的和sum,然后再使用s = to_string(sum)继续求,最终返回s即可,s必定是长度为1的字符串。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询