十五届蓝桥杯省赛C/C++B组:试题 A: 握手问题, 试题 B: 小球反弹

本文提供了两道编程题目,一是关于50人会议中未握手7人握手次数的计算,二是关于长方形内小球反弹路径总路程的求解。通过代码展示了如何用C++解决这两个数学问题。
摘要由CSDN通过智能技术生成

试题 A: 握手问题

本题总分: 5

【问题描述】

小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上, 大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手(但这 7 人与除这 7 人以外的所有人进行了握手)。请问这些人之间一共进行了多 少次握手?注意 A B 握手的同时也意味着 B A 握手了,所以算作是一次握手。
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分

运行代码

#include <iostream>  
using namespace std;
int main() {
    int a = 50;
    int b = 7;
    int a1 = (a * (a- 1)) / 2;
    int b1= (b * (b - 1)) / 2;
    int c = a1 - b1;
    cout << c <<endl;
    return 0;
}

直接利用数学的握手公式进行计算

 试题 B: 小球反弹

本题总分:5 分

【问题描述】

有一长方形,长为 343720 单位长度,宽为 233333 单位长度。在其内部左 上角顶点有一小球(无视其体积),其初速度如图所示且保持运动速率不变,分 解到长宽两个方向上的速率之比为 dx : dy = 15 : 17。小球碰到长方形的边框时 会发生反弹,每次反弹的入射角与反射角相等,因此小球会改变方向且保持速 率不变(如果小球刚好射向角落,则按入射方向原路返回)。从小球出发到其第 一次回到左上角顶点这段时间里,小球运动的路程为多少单位长度?答案四舍 五入保留两位小数。

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个小数,在提交答案时只填写这个小数,填写多余的内容将无法得分。

运行代码

#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int gcd(int a, int b) {
    while (b!= 0) {
        int temp = a % b;
        a = b;
        b = temp;
    }
    return a;
}

int main() {
    int x = 343720;
    int y = 233333;
    int dx = 15;
    int dy = 17;
    int p = y * dx;
    int q = x * dy;
    int com = gcd(p, q);
    p /= com;
    q /= com;
    int t = 2 * x * p / dx;
    double sum = sqrt(15 * 15 + 17 * 17) * t;
    printf("%.2f", sum);
    return 0;
}

代码思路

  1. gcd 函数:计算两个整数的最大公约数。

    使用辗转相除法。通过不断地用较大数除以较小数取余数,然后将较大数更新为较小数,较小数更新为余数,直到余数为 0,此时较大数就是最大公约数。
  2. main 函数

    • 定义变量:首先定义了整数变量 xydxdy,分别代表一些特定的值,可能是与运动相关的参数。
    • 计算中间变量
      • 计算 p = y * dx 和 q = x * dy,这两个变量可能分别代表在两个不同方向上的某种 “来回数”。
      • 调用 gcd 函数计算 p 和 q 的最大公约数 com,然后分别用 p 和 q 除以最大公约数进行化简。
      • 接着计算 t = 2 * x * p / dx,这个变量可能与运动的时间或某个计数有关。
    • 计算并输出结果
      • 计算 sum = sqrt(15 * 15 + 17 * 17) * t,这里 sqrt(15 * 15 + 17 * 17) 可能是某个固定的距离系数,乘以 t 得到总距离。
      • 使用 printf("%.2f", sum) 以保留两位小数的格式输出总距离
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

筱姌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值