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;
}