2025蓝桥杯C++研究生组真题
A:数位倍数(5分)
问题描述:请问在 1 至 202504(含)中,有多少个数的各个数位之和是 5 的整数倍。例如:5、19、8025 都是这样的数。
A是填空题,直接写出答案。40500
解题思路:
暴力解法:遍历所有数字,对于每个数字,202504,计算各个数位的和。然后条件判断如何是5的倍数,那么计数累加。
关键点:1、如何计算一个数(例如202504)的各个数位之和。
答:通过取模%10
、整除/10
实现逐位提取,然后累加。
例如取模%10,可以实现把个位4提取出来。202504 / 10 = 202500 .... 4, num % 10
取个位值
num整除10,num/= 10
可以实现逐步右移数字。例如 123
/ 10 =12
。12
/ 10→ 1
2、保护循环变量,使用临时变量num
,代替 i
, 避免修改循环变量导致的逻辑错误。
需要变量,
cnt计数有多少个数是5的倍数。num是要被拆解各个数位的数,也是循环增加的数。sum用于计算拆解下来的各个数位,num++之后sum要归0,
用while循环,来分解num的每一位并累加。
#include<bits/stdc++.h>
using namespace std;
int main(){
int cnt;
int a,b;
cin >> a >> b;
// 遍历从 a 到 b 的所有数字
for(int i=a; i<=b; i++){
int sum = 0; // 用于累加当前数字的各位之和
int num = i; // 临时变量,避免直接修改循环变量i
分解num的每一位并累加
while(num > 0){
sum += num % 10; //取num的最后一位。123 % 10 = 3
num /= 10; //去掉已经处理过的最后一位。 123 -> 12 -> 1 -> 0
}
if(sum % 5 == 0){
cnt++;
}
}
cout << "符合条件的数字个数:" << cnt << endl;
return 0;
}
后面还有一些题目,时间原因,后续慢慢更新题解。
-
B:IPv6 (5分)
-
C:变换数组 (10分)
【问题描述】
输入一个数组 a ,包含有 n 个元素 a1,a2,…,an。对这个数组进行 m 次变换,每次变换会将数组 a 中的每个元素 ai 转换为 ai · bitCount(ai)。其中 bitCount(x) 表示数字 x 的二进制表示中 1 出现的次数,例如 bitCount(3)=2,因为 3 的二进制表示为 11,其中 1 出现了两次。
请输出变换之后的数组内容。
【输入格式】
输入的第一行包含一个正整数 n ,表示数组 a 中的元素个数。
第二行包含 n 个整数 a1,a2,…,an,相邻整数之间使用一个空格分隔。
第三行包含一个整数 m,表示变换次数。
【输出格式】
输出一行,包含 n 个整数,相邻整数之间使用一个空格分隔,表示变换之后得到的数组 a。
【样例输入】
2
5 7
2
【样例说明】
5=(101)2,7=(111) 2,第一次变化后 a=[10,21]。
10=(1010) 2,21=(10101) 2,第二次变换后 a=[20,63]。
【样例输出】
20 63
解题关键:
-
bitCount(int x)函数。输入一个十进制数x,统计x的二进制数里面的1的个数。
解题思路:
遍历数组,循环m次,表示做m次变换。
对每轮变换中:对每个数ai,调用bitCount(ai),然后ai = ai * bitCount(ai)
就是就是每个元素每轮做的变换。
关键代码如下:
//m次变换
for(int i=0; i<m; i++){
//每轮变换,遍历所有数组元素。
for(int j=0; j<num.size(); j++){
num[i] = num[i] * bitCount(num[i]);
}
}
-
D:最大数字(10分)
【问题描述】
我们有 n 个连续的整数 1,2,3,…,n,可以自由排列它们的顺序。
然后,我们把这些数字转换成二进制表示,按照排列顺序拼接形成一个新的二进制数。
我们的目标是让这个二进制数的值最大,并输出这个二进制对应的十进制表示。
【输入格式】
输入一行包含一个正整数 n 。
【输出格式】
输出一行包含一个整数表示答案。
【样例输入】
3
1
【样例输出】
30
1
【样例说明】
1 的二进制为 1;2 的二进制为 10;3 的二进制为 11;其组成的最大的二进制数字为 11110,对应的十进制数字为 30。
-
E:冷热数字队列(15分)
-
F:01串(15分)
-
G:甘蔗(20分)
-
H:原料采购(20分)
题目参考的原文链接:https://blog.csdn.net/weixin_46560512/article/details/147169105