写在前面:本题解旨在帮助进行作业参考,为学习升华所用。登高自卑,戒骄戒躁。
第一题:快速公交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;
C++模拟题解析

最低0.47元/天 解锁文章
1230





