题解:P10423 [蓝桥杯 2024 省 B] 填空问题
wangbinfeng · · 题解
首先考虑朴素的握手问题(
思路一: 第
1 个人要和其余49 个人握手,第2 个人也要和其他人握手,但由于已经和第1 个人握手,故只需和48 个人握手即可,同理第3 个人要和47 个人握手,……第49 个人要和1 个人握手,第50 因为已经和所有人都握了手,所以无需再握手。答案为\displaystyle\sum^{49}_{i=1}i=\displaystyle\frac{50\times49}{2} 。
思路二: 每个人都要和除了自己外所有人握手,所以
50 个人每个人都握手了49 次,共50\times49 次。设两个人X 和Y 握手,X 会主动向Y 握一次手,Y 又会主动向X 握一次手,可以发现每两个人都会握手两次,故答案要除以二。
下面考虑本题,因为有
思路一: 假设这
7 个人也互相握手,则答案如上面描述。再考虑他们不握手,则只需减掉这7 个人握手次数即可,答案为\displaystyle\frac{50\times49-7\times6}{2} 。
思路二: 考虑互相握手的43 人,共握手\displaystyle\frac{43\times42}{2} 次,再加上这7 个人分别与另外43 握手,共握手7\times 43 次,答案为\displaystyle\frac{43\times42}{2}+7\times 43 。
思路三: 编程,使用暴力法枚举所有的握手情况,思路较为简单,代码实现也较短,这里省略掉代码,请读者自行思考。
三种思路的答案均为 1204。
小花絮:点击这里查看。
由于反弹比较麻烦,考虑不反弹的情况。将长方形分别向右方和下方翻折,把小球速度正交分解成水平速度和竖直速度。易得水平位移比竖直位移等于
可以编程用暴力法求解答案,代码如下:
#include<bits/stdc++.h>
using namespace std;
signed main(){
for(int i=1;i<=1e4;i++)for(int j=1;j<=1e4;j++){
const unsigned long long x=343720*i*2,y=233333*j*2;
if(17*x==15*y){
cout<<fixed<<setprecision(2)<<sqrt((double)x*x+y*y);
return 0;
}
}
}
算出答案为:1100325199.77。