【蓝桥杯】模拟1

今天是【蓝桥杯】模拟的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。

持续更新,欢迎一起学习。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qing小星星

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

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

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

打赏作者

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

抵扣说明:

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

余额充值