今天是【蓝桥杯】模拟的5个练习题。
一、成绩统计
成绩统计1
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。
输入描述
输入的第一行包含一个整数 n(1≤n≤104),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。
for,while
如果后面要继续使用n的话,循环用for。
#include<iostream>
#include<cstdio>
using namespace std;
int main(void)
{
int n,g;
cin>> n;
int res1 = 0,res2 = 0;
for(int i = 0; i < n; i++)
//这个题用while不太合适。后面还要用到 n,可以考虑找一个替代变量,这里我们直接改用for循环。
{
cin>> g;
if(g >= 60)
res1++;
if(g >= 85)
res2++;
}
printf("%.0lf%%\n%.0lf%%",res1*100.0/n,res2*100.0/n);
return 0;
}
二、成绩分析
成绩分析2
题目描述
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
请计算这次考试的最高分、最低分和平均分。
输入描述
输入的第一行包含一个整数 n(1≤n≤104),表示考试人数。
接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分。
输出描述
输出三行。
第一行包含一个整数,表示最高分。
第二行包含一个整数,表示最低分。
第三行包含一个实数,四舍五入保留正好两位小数,表示平均分。
#include<iostream>
#include<cstdio>
using namespace std;
int main(void)
{
int n,t;
cin>> n;
int max = 0, min = 100;
int sum = 0;
for(int i = 0; i < n; i++)
{
cin>> t;
if(t > max) max = t;
if(t < min) min = t;
sum += t;
}
cout<< max << endl << min << endl;
printf("%.2lf",sum*1.0/n);
return 0;
}
三、九进制转十进制
九进制转十进制3
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
九进制正整数 (2022)9 转换成十进制等于多少?
#include<iostream>
using namespace std;
int main()
{
cout<< 2*9*9*9 + 2*9 + 2*1;
return 0;
}
四、跑步锻炼
跑步锻炼4
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝每天都锻炼身体。
正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(1日),为了激励自己,小蓝要跑 2 千米。如果同时是周一或月初,小蓝也是跑 2千米。
小蓝跑步已经坚持了很长时间,从 2000 年 1 月 1 日周六(含)到 2020 年 10 月 1 日周四(含)。请问这段时间小蓝总共跑步多少千米?
解决两个问题:
1、是否是月初
2、是否是周一
#include<iostream>
#include<cstdio>
using namespace std;
int day[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
//判断闰年
bool is_leap(int y)
{
return y%4 == 0 && y%100 != 0 || y%400 == 0;
}
//判断每个月有多少天
int daysofmonth(int y,int m)
{
if( m == 2 ) //这里也要注意:月份为2特殊处理
return day[2] + is_leap(y);
return day[m]; //其他情况一起直接return
}
int main(void)
{
int y = 2000,m = 1,d = 1,w = 6;
int res = 0;
while(y != 2020 || m != 10 || d != 2)
{
if(w == 1 || d == 1)
res += 2;
else
res ++;
w++;
if(w == 8)
w = 1;
d++;
if( d > daysofmonth(y,m) ){
d = 1,m++;
if( m == 13 )
m = 1, y++;
}
}
cout<< res << endl;
return 0;
}
五、刷题统计
刷题统计5
问题描述
小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天 做 a 道题目, 周六和周日每天做 b 道题目。请你帮小明计算, 按照计划他将在 第几天实现做题数大于等于 n 题?
输入格式
输入一行包含三个整数 a,b 和 n.
输出格式
输出一个整数代表天数。
先算有多少整周,天数= 周*7。
模拟最后一周,当n<= 0 时退出循环。
#include<iostream>
using namespace std;
typedef long long LL;
int main(void)
{
LL a,b,n;
cin>> a >> b >> n;
LL w = n / (5*a + 2*b);
LL ans = w * 7;
n = n % (5*a + 2*b);
cout<< ans << " " << n << endl;
//模拟最后一周
for(int i = 1; i <= 7 && n > 0; i++)
{
if(i <= 5)
n -= a, ans++;
else
n -= b, ans++;
}
cout<< ans << endl;
return 0;
}
这题存个疑问,for循环那里,如果把n>0改成n答案就不对。why?
解答来了:举个例子1&&-2的结果为1,两边都不为0,式子结果为1。
同理,这题的for循环里,不能写n,但能写n>0。
持续更新,欢迎一起学习。