第十五届蓝桥杯C++B组省赛

简介: 第十五届蓝桥杯C++B组省赛

1.握手问题
题目描述:

解题思路1(组合数学)
按照题目描述来说,会议有五十人,如果不加任何限制条件,这五十个人两两握手的次数是:
t o t a l = 49 + 48 + 47 + . . . . . . . . + 1 total=49+48+47+........+1total=49+48+47+........+1
利用高斯求和的得出:t o t a l = 50 ∗ 49 / 2 total=5049/2total=50∗49/2
如果加上限制条件的话,题目给定的其中有七个人不会相互握手,需要用上面总的不加限制的减去七个人相互握手的次数。
c n t = 6 + 5 + . . . . . . + 1 = 7 ∗ 6 / 2 cnt=6+5+......+1=7
6/2cnt=6+5+......+1=7∗6/2
上述两式作差即可
编写代码:

include

using namespace std;
int main()
{
int total = 50 49 / 2;
int cnt = 7
6 / 2;
cout << total - cnt << endl;
return 0;
}
1
2
3
4
5
6
7
8
9
解题思路2(暴力枚举)
将每个人握手的情况枚举出来即可。

include

using namespace std;
int main()
{
int ans = 0;
for (int i = 1;i <= 50;i++)
{
for (int j = i + 1;j <= 50;j++)
{
//排除掉七人的情况
if (!(i >= 1 && i <= 7 && j >= 1 && j <= 7))
{
ans++;
}
}
}
cout << ans << endl;
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2.小球反弹
问题描述:

做题思路
这道题我们肯定不能直接做的,这道题给定了d x : d y dx:dydx:dy的值说明这道题我们应该分解来做,将小球的反弹的路径分解为x方向和y方向来做。
我们首先假设x方向上经过了p个来回,y方向上经历了q个来回,因为是分解的缘故,所以两个分解方向上的时间是相同的。
所以可以得出两个等式:
d x ∗ t = 2 p x dxt=2pxdx∗t=2px(由于这里一半的路程是x,所以一个来回的路程是2x,乘以来回就是总路程)
d y ∗ t = 2 q x dy
t=2qxdy∗t=2qx

将这两个式子进行比例
d x d y = p x q y \frac{dx}{dy}=\frac{px}{qy}
dy
dx

=
qy
px

得到这个式子之后我们可以利用gcd对这个式子的左边进行约分。
可以得出:p = d x ∗ y p=dxyp=dx∗y和q = d y ∗ x q=dyxq=dy∗x
算出q或者p之后可以利用公式计算t:t = 2 p x / d x t=2px/dxt=2px/dx
最后得出总路程:总路程 = t ∗ ( s q r t ( 1 5 2 + 1 7 2 ) ) 总路程=t*(sqrt(15^2+17^2))总路程=t∗(sqrt(15
2
+17
2
))

编写代码:

//求最大公约数
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
int main()
{
//给出x方向和y方向的速度
int dx = 15, dy = 17;
//给出x方向和y方向上的距离
int x = 343720, y = 233333;
//求出多少来回
int q = dy x, p = dx y;
//求最大公约数
int g = gcd(p, q);
p /= g, q /= g;

//计算时间
int t = 2 * p * x / dx;

//求路程
double ans = t * sqrt(15 * 15 + 17 * 17);
printf("%.2lf\n", ans);
return 0;

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
3.好数
问题描述:

数据量:

算法思路(暴力解法)—不会超时
遍历1到n的数,然后写一个check函数判断每个数是否是好数,这里的时间复杂度是n ∗ l o g n n*lognn∗logn
编写代码:

include

using namespace std;
int N,count;

bool Check(int n)
{
int i=1;
while(n!=0)
{
int tail=n%10;
if(i%2==1)
{
if(tail%2!=1)return false;
}
else
{
if(tail%2!=0)return false;
}
i++;
n/=10;
}
return true;
}

int main()
{
// 请在此输入您的代码
cin>>N;
for(int i=1;i<N;i++)
{
if(Check(i))
{
count++;
}
}
cout<<count<<endl;
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
4.R格式
题目描述:

相关文章
|
2月前
|
算法 测试技术 C++
【动态规划算法】蓝桥杯填充问题(C/C++)
【动态规划算法】蓝桥杯填充问题(C/C++)
|
2月前
|
人工智能 算法 BI
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
第十四届蓝桥杯省赛大学C组(C/C++)三国游戏
|
2月前
|
人工智能 C++
第十四届蓝桥杯省赛大学B组(C/C++)整数删除
第十四届蓝桥杯省赛大学B组(C/C++)整数删除
|
2月前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
44 5
|
7月前
|
算法 测试技术 C++
小唐开始刷蓝桥(八)2013年第四届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(八)2013年第四届C/C++ B组蓝桥杯省赛真题
|
7月前
|
算法 C++ 数据格式
小唐开始刷蓝桥(七)2014年第五届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(七)2014年第五届C/C++ B组蓝桥杯省赛真题
|
7月前
|
算法 C++
小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(五)2016年第七届C/C++ B组蓝桥杯省赛真题
|
7月前
|
算法 C++
小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(六)2015年第六届C/C++ B组蓝桥杯省赛真题
|
7月前
|
人工智能 搜索推荐 C++
小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题
小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题
|
7月前
|
机器学习/深度学习 存储 人工智能
小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题
小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题