蓝桥杯每天5题

2025/03/31打卡

问题1 小球反弹

问题描述

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

答案提交

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

解答1

这里解答的思路有点新颖,首先我们注意到速度是不变的,所以只是方向改变打的话,我们的思路其实可以转化为击中角落其实就是走了长和宽的奇数偶数倍,其实取模为0,如果长宽取模都为0,则说明其位置已经在角落了,那么我们知道单位是单位长度(抽象),则其路程不就为速度乘以时间,我们知道了其速率之比(我们设vx=15,vy=17,小k约掉,由单位长度其实我们知道v可以看成1),则只需要判断一下他的宽高路程取模后为0即可,最后勾股定理算出路程,最后原路返回记得乘2

#include <bits/stdc++.h>
using namespace std;
int main()
{
    long long length=343720,width=233333;
    long long t=1;//第几次碰撞也就是第几秒
    while(1){
        if(15*t%length==0&&17*t%width==0){
            break;
        }   
        t++;
    }
    //因为速度不变,每次向上下和向左右的速度不变,所以其实知道时间就可以算出路程
    printf("%.2f",2*sqrt(15*15*t*t+17*17*t*t));
    return 0;
}
​

问题2 区间和

P8218 【深进1.例1】求区间和 - 洛谷

P8218 【深进1.例1】求区间和

题目描述

给定 $n$ 个正整数组成的数列 $a_1, a_2, \cdots, a_n$ 和 $m$ 个区间 $[l_i,r_i]$,分别求这 $m$ 个区间的区间和。

对于所有测试数据,$n,m\le10^5,a_i\le 10^4$

输入格式

第一行,为一个正整数 $n$ 。

第二行,为 $n$ 个正整数 $a_1,a_2, \cdots ,a_n$

第三行,为一个正整数 $m$ 。

接下来 $m$ 行,每行为两个正整数 $l_i,r_i$ ,满足$1\le l_i\le r_i\le n$

输出格式

共 $m$ 行。

第 $i$ 行为第 $i$ 组答案的询问。

输入输出样例 #1

输入 #1

4
4 3 2 1
2
1 4
2 3

输出 #1

10
5

说明/提示

样例解释:第 $1$ 到第 $4$ 个数加起来和为 $10$。第 $2$ 个数到第 $3$ 个数加起来和为 $5$。

对于 $50 \%$ 的数据:$n,m\le 1000$;

对于 $100 \%$ 的数据:$1 \le n, m\le 10^5$,$1 \le a_i\le 10^4$

解答2

套前缀和模版,用一个数组去记录部分的和

//区间和
//相加注意ll,记得考虑数组大小
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
#define ll long long
ll a[N],sum[N];
int main(){
    ll num,cnt,q1,q2,ans;
    cin>>num;
    cin>>a[0];
    sum[0]=a[0];
    for(int i=1;i<num;i++){
        cin>>a[i];
        sum[i]=sum[i-1]+a[i];
    }
    cin>>cnt;
    for(int i=0;i<cnt;i++){
        cin>>q1>>q2;
        ans=sum[--q2]-sum[--q1-1];
        cout<<ans<<endl;
    }
    return 0;
}

问题3 to_string函数

挑7牛客题霸牛客网

image-20250331201657398

解答3

//过7
#include <iostream>
using namespace std;
​
int main() {
    int a,ans=0;
    string s;
    cin>>a;
    for(int i=1;i<=a;i++){
        if(i%7==0)
            ans++;
        else{
            s=to_string(i);
            if(s.find('7')!=string::npos)
                ans++;
        }
    
    }
    cout<<ans;
}

问题4 怎么忽略掉无效输出

不要三句号的歪牛客题霸牛客网

image-20250331202414361

解答4

//不要三句号的歪
#include<bits/stdc++.h>
using namespace std;
int main(){
    char c;
    int a,b,d;
    cin>>a>>c>>b>>c>>c>>c>>c>>c>>d;
    cout<<d-3-a+1;
​
    return 0;
}

问题5  总结规律题

杨辉三角的变形牛客题霸牛客网

image-20250331215602118

解答5

//变形的杨辉三角
#include<bits/stdc++.h>
using namespace std;
#define ll long long 
int main(){
    int num;
    cin>>num;
    if(num==1||num==2)
        cout<<-1;
    else if(num%4==0)
        cout<<3;
    else if(num%2!=0)
        cout<<2;
    else
        cout<<4;
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凌乱的程序猿

谢谢大佬长这么好看还给我打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值