目录
- 前言
- 一、劲舞团
- 二、召唤数学精灵
- 写在文末
前言
今天是蓝桥杯备赛每日一题的第九天,感兴趣的小伙伴,可以订阅一下专栏。友友们一定要一起跟着做一下,这样印象才深刻!!!今天的话来两道填空题,填空题也是蓝桥杯必不可少的题型。
一、劲舞团
题目链接
题目思路:我们肯定要将文件里的输入读取出来,这里用到了 fstream 这个头文件,看了一下log.txt文件,发现时间都是顺序增大的,所以我们只需要按照这个逻辑只有操作正确且两者间隔时间小于等于1000ms,我们才算一次连击,记录最大连击数。暴力模拟一遍就得到答案了。思路很简单,主要是要记住文件输入的处理。
流程:
1 处理文件输入
2 判断是否连击
3 统计最大连击数
我们看下代码:
#include<iostream>
#include<fstream>
using namespace std;
int main(){
fstream file("log.txt");//读入文件流
char a,b;
long long c = 0,t = -1;
int ans = 1,cnt = 1;
while(file>>a>>b>>c){
if(a == b && ( (c-t) <= 1000 || t == -1)){//只有操作正确且两者间隔时间小于等于1000ms
cnt ++;
ans = max(cnt,ans);
}
else{
cnt = 1;
}
t = c;//记录上一次敲击的时间
}
cout<<ans<<endl;
}
答案输出为9
二、召唤数学精灵
题目链接
题目思路:由于题目要找出i满足A(i) - B(i)能被100整除的数量,我们先得知道一个规律就是a如果能被100整除,b能被100整除,那么a - b 一定也可以被100整除,从这个规律出发,我们发现A(n) 每200个数是一个循环,B(i)只要i大于等于10就能被100整除。可以看以下公式:
也就是说,只要满足i>=10并且找到200以内A(i)能被100整除 i 的数量,再乘以循环的次数就是答案。不过,我们最后还需要小心,小于10的 i ,我们也需要考虑,最后我们再枚举小于10的,找到满足条件的加上,就是最终答案。
我们看下代码:
#include<iostream>
using namespace std;
long long ans;
int A(int x){
int sum=0;
for(int i=1;i<=x;++i)
sum+=i;
return sum;
}
int B(int x){
int sum=1;
for(int i=1;i<=x;++i) sum*=i;
return sum;
}
int main(){
for(int i=1;i<=10;++i){//先找到小于10满足条件的
if((A(i)-B(i))%100==0){
ans++;
}
}
int cnt=0;
for(int i =1;i<=200;++i){//找到200次循环中,A(i)满足条件的数量
if( A(i) % 100 ==0 ) cnt++;
}
ans+=2024041331404202/200*cnt;
cout<<ans<<endl;
}
答案输出为40480826628086
写在文末
有疑问的友友,欢迎在评论区交流,笔者看到会及时回复。
请大家一定一定要关注!!!
请大家一定一定要关注!!!
请大家一定一定要关注!!!
友友们,你们的支持是我持续更新的动力~