当前位置: 首页 > news >正文

[蓝桥杯真题题目及解析]2025年C++b组

移动距离(填空)**

小明初始在二维平面的原点,他想前往坐标 (233,666)。在移动过程中,他只能采用以下两种移动方式,并且这两种移动方式可以交替、不限次数地使用:

水平向右移动,即沿着 x 轴正方向移动一定的距离。
沿着一个圆心在原点 (0,0)、以他当前位置到原点的距离为半径的圆的圆周移动,移动方向不限(即顺时针或逆时针移动不限)。
在这种条件下,他到达目的地最少移动多少单位距离?你只需要输出答案四舍五入到整数的结果。
解析:
最少移动单位距离=沿 x 轴正方向移动的距(半径)+弧长

弧长=θ*半径

tanθ=666/233

θ=arctan(666/233)

代码

#include <iostream>
#include <cmath>
int main() {double r = sqrt(233*233 + 666*666);double theta = atan2(666, 233);double res = r + theta * r;printf("%.0lf", res); // 输出1576return 0;
}

客流量上限(填空)**

一家连锁旅馆在全国拥有 2025 个分店,分别编号为 1 至 2025。随着节日临近,总部决定为每家分店设定每日客流量的上限,分别记作 A1​,A2​,…,A2025​。这些上限并非随意分配,而是需要满足以下约束条件:

A1​,A2​,…,A2025​ 必须是 1 至 2025 的一个排列,即每个 Ai​ 均是 1 至 2025 之间的整数,且所有 Ai​ 互不相同。
对于任意分店 i 和 j(1≤i,j≤2025,i 可等于 j),它们的客流量上限 Ai​ 和 Aj​ 的乘积不得超过 i×j+2025。
这些约束旨在平衡各分店客流压力,确保服务质量和运营稳定性。

现在,请你计算这样的分配方案究竟有多少种。由于答案可能很大,你只需输出其对 109+7 取余后的结果即可。
在这里插入图片描述

代码

#include <iostream>
using namespace std;
const int mod = 1e9+7;
int main() {int n = 2025, res = 1;for (int i=0; i<1012; i++) res = res * 2 % mod;cout << res; // 输出781448427return 0;
}

可分解的正整数(编程)

定义一种特殊的整数序列,这种序列由连续递增的整数组成,并满足以下条件:

序列长度至少为 3。
序列中的数字是连续递增的整数(即相邻元素之差为 1),可以包括正整数、负整数或 0。
例如,[1,2,3]、[4,5,6,7] 和 [−1,0,1] 是符合条件的序列,而 [1,2](长度不足)和 [1,2,4](不连续)不符合要求。

现给定一组包含 N 个正整数的数据 A1​,A2​,…,AN​。如果某个 Ai​ 能够表示为符合上述条件的连续整数序列中所有元素的和,则称 Ai​ 是可分解的。

请你统计这组数据中可分解的正整数的数量。
思路:直接统计输入中非1的数的个数。

代码

#include <iostream>
using namespace std;
int main() {int n, x, cnt=0;cin >> n;while (n--) {cin >> x;if (x != 1) cnt++;}cout << cnt;return 0;
}

产值调整(编程)

偏远的小镇上,三兄弟共同经营着一家小型矿业公司“兄弟矿业”。公司旗下有三座矿山:金矿、银矿和铜矿,它们的初始产值分别用非负整数 A、B 和 C 表示。这些矿山的产出是小镇经济的核心,支撑着三兄弟和许多矿工家庭的生计。

然而,各矿山的产值波动剧烈,有时金矿收益高而银矿、铜矿低迷,有时则相反。这种不稳定性让公司收入难以预测,也常引发兄弟间的争执。为了稳定经营,三兄弟设计了一个公平的产值调整策略,每年执行一次,每次调整时,将根据当前的产值 A、B、C,计算新产值:

计算出 A′、B′、C′ 后,同时更新:A 变为 A′,B 变为 B′,C 变为 C′,作为下一年调整的基础。

三兄弟认为这个方法能平衡产值波动,于是计划连续执行 K 次调整。现在,请你帮他们计算,经过 K 次调整后,金矿、银矿和铜矿的产值分别是多少。

解析
多次调整后,A、B、C会收敛到相同值。模拟时若发现三者相等则提前终止循环。

代码

#include <iostream>
using namespace std;
int main() {int T, A, B, C, K;cin >> T;while (T--) {cin >> A >> B >> C >> K;while (K--) {int a = (B + C) / 2, b = (A + C) / 2, c = (A + B) / 2;if (a == b && b == c) break;A = a, B = b, C = c;}cout << A << " " << B << " " << C << endl;}return 0;
}

画展布置(编程)**

问题描述
画展策展人小蓝和助理小桥为即将举办的画展准备了 N 幅画作,其艺术价值分别为 A1​,A2​,…,AN​。他们需要从这 N 幅画中挑选 M 幅,并按照一定顺序布置在展厅的 M 个位置上。如果随意挑选和排列,艺术价值的变化可能会过于突兀,导致观众的观展体验不够流畅。

为了优化布置,他们查阅了《画展布置指南》。指南指出,理想的画展应使观众在欣赏画作时,艺术价值的过渡尽量平缓。指南建议,选择并排列 M 幅画,应使艺术价值的变化程度通过一个数值 L 来衡量,且该值越小越好。数值 L 的定义为:

L=i=1∑M−1​∣Bi+12​−Bi2​∣

其中 Bi​ 表示展厅第 i 个位置上画作的艺术价值。

现在,他们希望通过精心挑选和排列这 M 幅画作,使 L 达到最小值,以提升画展的整体协调性。请你帮他们计算出这个最小值是多少。
解析
当画作按平方值排序后,最优解为连续M幅画的平方值极差。例如:选排序后的连续子数组,最小化最大值与最小值之差。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {int N, M;cin >> N >> M;vector<long long> A(N);for (int i=0; i<N; i++) cin >> A[i], A[i] *= A[i];sort(A.begin(), A.end());long long ans = LLONG_MAX;for (int i=0; i+M-1 < N; i++)ans = min(ans, A[i+M-1] - A[i]);cout << ans;return 0;
}

以下是2025年第十六届蓝桥杯省赛C/C++大学B组其他题目的解析及参考答案:


F题:水质检测(编程15分)

问题描述
在2×n的河床上,某些位置已有检测器(用#表示),其余为空白(.)。要求添加最少的检测器,使所有检测器连通。求最少需添加的检测器数量。
解析思路
采用动态规划处理连通性问题。定义dp[i][j]表示处理到第i列时,该列的上下行状态为j(二进制表示,如1表示上行有检测器,2表示下行,3表示上下均有)的最小添加数。状态转移需考虑前一列与当前列的连通性,确保相邻列至少有一个位置连通。
代码示例

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int main() {string s1, s2;cin >> s1 >> s2;int n = s1.size();vector<int> sta(n + 1);for (int i = 0; i < n; i++) {if (s1[i] == '#') sta[i + 1] |= 1;if (s2[i] == '#') sta[i + 1] |= 2;}// DP初始化及状态转移略cout << ans << endl;return 0;
}

生产车间(编程20分)

问题描述
给定一棵树,每个节点代表车间,需去掉一些叶子节点,使得每个非叶子节点的子节点权值之和不大于其自身权值。求根节点(节点1)的叶子节点权值和最大值。
解析思路
采用树形动态规划结合分组背包思想。定义dp[u][j]表示以节点u为根的子树中是否存在路径和为j的合法路径。递归处理子节点,并通过分组背包合并子节点的状态。
代码示例

#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
vector<int> g[N];
int w[N], n;
bool dp[N][N];
void dfs(int u, int fa) {dp[u][0] = true;if (g[u].size() == 1 && fa != 0) {dp[u][w[u]] = true;return;}for (int v : g[u]) {if (v == fa) continue;dfs(v, u);for (int j = w[u]; j >= 0; j--)for (int k = 0; k <= j; k++)if (dp[u][j - k] && dp[v][k]) dp[u][j] = true;}
}

装修报价(编程20分)

问题描述
在数字间插入加减或异或符号,求所有可能计算值的总和。
解析思路
预处理前缀异或和,利用位运算性质分位统计贡献。每位独立计算,总和对每位贡献求和。
代码示例

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MOD = 1e9 + 7;
int main() {string s;cin >> s;int n = s.size();vector<ll> pow3(n + 1, 1);for (int i = 1; i <= n; i++) pow3[i] = pow3[i - 1] * 3 % MOD;// 预处理前缀异或和并计算贡献cout << ans << endl;return 0;
}
http://www.xdnf.cn/news/269443.html

相关文章:

  • 计组复习笔记 3
  • 《计算机系统结构》考题知识点整理
  • 经典算法 求解台阶问题
  • 【深度学习-Day 4】掌握深度学习的“概率”视角:基础概念与应用解析
  • AUTOSAR图解==>AUTOSAR_SRS_CoreTest
  • Python----卷积神经网络(LeNet-5的手写体识别)
  • 降维大合集
  • 使用PageHelper实现分页查询(详细)
  • 【多线程】计算机工作原理、操作系统(内含进程、PCB属性、进程调度、内存分配、进程间的通信) —— 简单介绍
  • Nginx相关知识
  • Space Engineers 太空工程师 [DLC 解锁] [Steam] [Windows]
  • 突破养生误区迷障,开启科学养生新程
  • Pytorch-CUDA版本环境配置
  • 实验-组合电路设计1-全加器和加法器(数字逻辑)
  • 冒泡排序详解:从零理解其核心思想与循环设计原理
  • 【信息系统项目管理师-论文真题】2012下半年论文详解(包括解题思路和写作要点)
  • 2025年 蓝桥杯省赛 Python A 组题目
  • 使用DeepSeek定制Python小游戏——以“俄罗斯方块”为例
  • 回溯算法详解(Java实现):从组合到排列的全面解析
  • 方案解读:华为-智慧园区数字平台技术方案【附全文阅读】
  • 安卓基础(MediaProjection)
  • Qt/C++源码/实时视音频通话示例/极低延迟/可外网通话/画中画/支持嵌入式板子
  • 赛季7靶场 -- Checker --User flag
  • 一键部署自己的私域直播
  • 生物化学笔记:神经生物学概论08 运动系统 人类逐渐建立运动技能 不同层次的运动发起
  • 第43周:GAN总结
  • python下载
  • CGI 协议是否会具体到通讯报文?
  • 节流 和 防抖的使用
  • C++类_初始化列表