目录
一、数位长度筛选问题
问题描述
测试样例
解题思路:
问题理解
数据结构选择
算法步骤
关键点
最终代码:
运行结果:
二、数值生成与运算问题
问题描述
测试样例
解题思路:
问题理解
数据结构选择
算法步骤
最终代码:
运行结果:编辑
一、数位长度筛选问题
问题描述
在一个神秘的探险中,年轻的探险家小乐发现了一箱宝藏,箱子里装满了各式各样的神秘符文,每个符文都代表一个整数。他对这些符文的特性产生了极大的好奇,尤其是关于它们的长度。
小乐决定只关注那些符文位数为偶数的,想要统计出这样的符文有多少个。你的任务是帮助小乐计算出长度为偶数的符文数量,并给出最终的统计结果。
测试样例
样例1:
输入:
nums = [12, 345, 2, 6, 7896]
输出:2
样例2:
输入:
nums = [555, 901, 482, 1771]
输出:1
样例3:
输入:
nums = [1, 22, 333, 4444]
输出:2
解题思路:
问题理解
你需要统计一个整数数组中,长度为偶数的整数的数量。这里的“长度”指的是整数的位数。
数据结构选择
- 你已经有了一个整数数组
nums
,这个数组中的每个元素都是一个整数。
算法步骤
- 遍历数组:你需要遍历数组中的每一个整数。
- 计算位数:对于每一个整数,你需要计算它的位数。
- 判断偶数位:判断这个整数的位数是否为偶数。
- 统计结果:如果位数是偶数,则增加计数器。
- 返回结果:最后返回计数器的值。
关键点
- 如何计算一个整数的位数?
- 可以通过将整数转换为字符串,然后计算字符串的长度。
- 或者通过不断除以10,直到整数变为0,统计除法的次数。
最终代码:
#include <iostream>
#include <vector>
using namespace std;
int solution(std::vector<int> nums) {
// PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE
// write code here
int count = 0; // 用于统计符合条件的整数数量
for (int num : nums) {
// 计算当前整数的位数
int digits = 0;
int temp = num;
while (temp != 0) {
temp /= 10;
digits++;
}
// 判断位数是否为偶数
if (digits % 2 == 0) {
count++;
}
}
return count; // 返回统计结果
}
int main() {
cout << (solution({12, 345, 2, 6, 7896}) == 2) << endl;
cout << (solution({555, 901, 482, 1771}) == 1) << endl;
cout << (solution({1, 22, 333, 4444}) == 2) << endl;
return 0;
}
运行结果:
二、数值生成与运算问题
问题描述
已知 n 和 start,计算 start xor (start + 2) xor (start + 4) ... xor (start + n + n - 2)
。
测试样例
样例1:
输入:
n = 12, start = 3
输出:24
样例2:
输入:
n = 20, start = 16
输出:0
样例3:
输入:
n = 18, start = 9
输出:2
样例4:
输入:
n = 7, start = 1
输出:15
解题思路:
问题理解
你需要计算一系列数的异或结果。具体来说,给定两个整数 n
和 start
,你需要计算以下表达式的结果:
[ \text{result} = \text{start} \oplus (\text{start} + 2) \oplus (\text{start} + 4) \oplus \ldots \oplus (\text{start} + 2(n-1)) ]
数据结构选择
这个问题不需要复杂的数据结构,只需要一个变量来存储当前的异或结果。
算法步骤
- 初始化结果变量:将结果变量初始化为
start
。 - 循环计算异或:从
start + 2
开始,每次增加 2,直到start + 2(n-1)
,将每个数与结果变量进行异或操作。 - 返回结果:循环结束后,结果变量中存储的就是最终的异或结果。
最终代码:
#include <iostream>
using namespace std;
int solution(int n, int start) {
// PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE
// write code here
// 初始化结果变量为 start
int result = start;
// 循环从 start + 2 开始,每次增加 2,直到 start + 2(n-1)
for (int i = 1; i < n; ++i) {
// 计算当前值并进行异或操作
result = result ^ (start + 2 * i);
}
// 返回最终的异或结果
return result;
}
int main() {
cout << (solution(12, 3) == 24) << endl;
cout << (solution(20, 16) == 0) << endl;
cout << (solution(18, 9) == 2) << endl;
cout << (solution(7, 1) == 15) << endl;
return 0;
}
运行结果: