题快速公交 |小希的新工作 |岁月留痕 |排队喝水 |阿迪看医生 |松雅的花园 |拜访朋友 |猴导师 |贪心的阿迪 |飞机起飞时间安排 |松雅的旅馆 |小女孩和楼梯|小希与火车|基于神经网络的垃圾分类

C++模拟题解析

 写在前面:本题解旨在帮助进行作业参考,为学习升华所用。登高自卑,戒骄戒躁。

第一题:快速公交BRT

  

 思路分析:本题考察数组基本应用,强模拟的题目。

#include<iostream>
using namespace std;
typedef unsigned int ui;
int main() {
    ui n, g, r;
    cin >> n >> g >> r;
    ui* t = new ui[n + 1];   //n个路口,n+1道路段,用数组t记录公交通过每段路口的时间
    for (ui i = 0; i <= n; i++)cin >> t[i];
    ui T;
    cin >> T;              //公交的辆数,即测试案例的数目 
    while (T--) {          
        ui q;              //出发的时间
        cin >>q;
        ui res = q;        //用res记录时间的推移
        for (ui i = 0; i < n; i++) {
            res += t[i];         //经过某路段之后的时间   亮绿灯亮红灯为一个循环节
            if (res % (g + r) < g) res += 0;  //res%(g+r)<g,模拟遇到绿灯的情境,不可=
            else res = res / (g + r) * (g + r) + (g + r);//遇到红灯则推一个循环节
        }
        res += t[n];
        cout << res << ' ';
    }
    delete[]t;
    return 0;
}

第一题:用数组模拟好情景即可,后面会遇到很多强模拟的题目

第二题:小希的工作

依旧是强模拟的题目。模拟很考验对所学知识的理解,以及实际应用的能力。能把所学知识轻易应用于生活,是工具学科极大的魅力所在。

#include<iostream>
using namespace std;
typedef unsigned int ui;
int main() {
	ui L, n, a;
	cin >> n >> L >> a;
	ui* qt = new ui[n];               //起始时间
	ui* jt = new ui[n];               //结束时间
	for (ui i = 0; i < n; i++) {
		cin >> qt[i];                 //客户来到的时间
		ui tmp;                       //工作的时间
		cin >> tmp;
		jt[i] = qt[i]+tmp;            //一段工作结束的时间
	} 
	ui cnt = 0;                       //计数                   
	cnt += qt[0] / a;                 //如果第一段工作开始时间大于放松时光a,cnt+1
	cnt += (L - jt[n - 1]) / a;       //同理,如果L-最晚的结束时间,cnt+1
	for (ui i = 1; i <= n - 1; i++) {  
		cnt += (qt[i] - jt[i - 1]) / a; //逐次判断每段工作时间的间隔里,有多少段放松时光
	}
	cout << cnt << endl;       //输出结果
	delete[]qt;
	delete[]jt;                //动态数组,一定要删除
    return 0;
}

题目三:岁月留痕

这题并没有多少心机,记住用一个数组即可模拟所有的月份天数连续情况。

#include<iostream>
using namespace std;
typedef unsigned int ui;
ui m[48] = { 31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31,31,28,31,30,31,30,31,31,30,31,30,31,31,28,31,30,31,30,31,31,30,31,30,31 };//一个数组便将所有情况模拟
int main() {                                             //切记,闰年在数组中,一定出现一次
    ui n;
    cin >> n;
    ui* t = new ui[n];
    for (ui i = 0; i < n; i++)cin >> t[i];   //输入的月份序列
    bool jd = 0;
    ui cnt = 0;
    for (ui j = 0; j <48; j++) {
        if (t[0] == m[j]) {              //数据不是很大,可以用蛮力枚举查找
            ui i = 0;         
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

0<Solving)1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值