2024年第十五届蓝桥杯C++B组
- A: 握手问题(5分)
- 问题描述
- 思路
- B: 小球反弹(5分)
- 问题描述
- 思路
- C: 好数(10分)
- 问题描述
- 输入格式
- 输出格式
- 样例输入1
- 样例输出1
- 样例输入2
- 样例输出2
- 样例说明
- 评测用例规模与约定
- 思路
博客地址:https://blog.csdn.net/m0_46326495/article/details/137728637
A: 握手问题(5分)
问题描述
小蓝组织了一场算法交流会议,总共有 50 50 50 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 7 7 个人,这7 人彼此之间没有进行握手(但这 7 7 7 人与除这 7 7 7 人以外的所有人进行了握手)。请问这些人之间一共进行了多少次握手?
注意 A A A 和 B B B 握手的同时也意味着 B B B 和 A A A 握手了,所以算作是一次握手。
思路
组合数学口算题, C 50 2 − C 7 2 = 1204 C_{50}^2-C_{7}^2=1204 C502−C72=1204
B: 小球反弹(5分)
问题描述
有一长方形,长为 343720 343720 343720 单位长度,宽为 233333 233333 233333 单位长度。在其内部左上角顶点有一小球(无视其体积),其初速度如图所示且保持运动速率不变,分解到长宽两个方向上的速率之比为 d x : d y = 15 : 17 dx : dy = 15 : 17 dx:dy=15:17。小球碰到长方形的边框时会发生反弹,每次反弹的入射角与反射角相等,因此小球会改变方向且保持速率不变(如果小球刚好射向角落,则按入射方向原路返回)。从小球出发到其第一次回到左上角顶点这段时间里,小球运动的路程为多少单位长度?答案四舍五入保留两位小数。
思路
也是数学题,最终返回左上角时,走过的水平路程和垂直路程一定是 343720 343720 343720和 233333 233333 233333的偶数倍,并且水平路程与垂直路程之比一定为 15 : 17 15:17 15:17。写暴力去找结果即可,答案是 1100325199.77 1100325199.77 1100325199.77
代码:
#include <iostream>
#include <cmath>using namespace std;
typedef long long ll;
const ll W = 233333;
const ll L = 343720;int main() {for (ll x = 2; x <= 10000; x += 2) {for (ll y = 2; y <= 10000; y += 2) {if (15 * W * y == 17 * L * x) {printf("%llf", sqrt((L * x) * (L * x) + (W * y) * (W * y)));return 0;}}}return 0;
}
C: 好数(10分)
问题描述
一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位· · · )上的数字是奇数,偶数位(十位、千位、十万位· · · )上的数字是偶数,我们就称之为“好数”。给定一个正整数 N N N,请计算从 1 1 1 到 N N N 一共有多少个好数。
输入格式
一个整数 N N N
输出格式
一个整数代表答案
样例输入1
24
样例输出1
7
样例输入2
2024
样例输出2
150
样例说明
对于第一个样例, 24 24 24 以内的好数有 1 1 1、 3 3 3、 5 5 5、 7 7 7、 9 9 9、 21 21 21、 23 23 23,一共 7 7 7 个。
评测用例规模与约定
对于 10 % 10\% 10% 的评测用例, 1 ≤ N ≤ 1 0 2 1 ≤ N ≤ 10^2 1≤N≤102
对于 100 % 100\% 100% 的评测用例, 1 ≤ N ≤ 1 0 7 1 ≤ N ≤ 10^7 1≤N≤107
思路
暴力枚举
#include <iostream>
#include <algorithm>using namespace std;int n;bool inline judge(int x) {int k = 1;while (x) {if ((x & 1) != (k & 1)) {return false;}x /= 10;k++;}return true;
}int main() {cin >> n;int res = 0;for (int i = 1; i <= n; i += 2) if (judge(i)) res++;cout << res << endl;return 0;
}