第十六届蓝桥杯大赛软件赛省赛 C/C++ (大学B组)解析

第十六届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组题目涵盖了算法设计、数据结构、数学逻辑等多个方面,对参赛者的编程能力和问题解决能力提出了较高要求。以下是对部分典型题目的解析及解题思路:

1. 移动距离问题

题目描述:小明从原点出发,需要移动到坐标 (233, 666),可以选择两种移动方式:

  • 向右水平移动固定距离。
  • 沿以当前位置到原点的距离为半径的圆周移动。

解题思路

  • 最短路径分析:直接水平移动到 x=233,然后沿圆弧移动到 (233, 666) 是最短路径。
  • 计算步骤
    1. 计算水平移动距离:233
    2. 计算圆弧长度:
      • 半径 r = sqrt(233^2 + 666^2)
      • 圆心角 theta = atan(666 / 233)(弧度制)。
      • 圆弧长度 L = r * theta
    3. 总距离为水平距离与圆弧长度之和。

代码示例

第十六届蓝桥杯大赛软件赛省赛 C/C++ (大学B组)解析_第1张图片

答案1576

2. 客流量上限问题

题目描述:2025 家分店,编号 1 至 2025,需为每家分店设定每日客流量上限 A1, A2, ..., A2025,满足:

  • A1, A2, ..., A2025 是 1 至 2025 的排列。
  • 对任意分店 i 和 jAi * Aj <= i * j + 2025

解题思路

  • 规律发现:通过小规模数据枚举,发现排列数满足 2^(n/2) 的规律。
  • 公式推导
    • 当 n 为偶数时,排列数为 2^(n/2)
    • 当 n 为奇数时,排列数为 2^((n-1)/2)
  • 计算
    • 对于 n = 2025,排列数为 2^1012
    • 对结果取模 10^9 + 7

代码示例

第十六届蓝桥杯大赛软件赛省赛 C/C++ (大学B组)解析_第2张图片

答案781448427

3. 可分解的正整数问题

题目描述:给定 N 个正整数,判断每个数是否可以表示为连续递增整数之和(长度至少为 3)。

解题思路

  • 数学分析
    • 连续整数之和公式:S = k * m + k * (k - 1) / 2,其中 k 为项数,m 为起始数。
    • 遍历可能的 k 和 m,判断是否存在满足条件的分解。
  • 优化
    • 排除 1,因为无法构成长度至少为 3 的序列。
    • 对于其他数,直接判断是否可以分解。

代码示例

第十六届蓝桥杯大赛软件赛省赛 C/C++ (大学B组)解析_第3张图片

答案:根据输入数据计算,例如样例输出为 3

你可能感兴趣的:(蓝桥杯,c语言,c++)