例1-11 评测机队列
一、前置知识
牛吃草问题
有一牧场,已知养牛\(27\)头,\(6\)天把草吃尽; 养牛\(23\)头,\(9\)天把草吃尽。如果养牛\(21\)头,那么几天能把牧场上的草吃尽呢?并且牧场上的草是不断生长的。
解法:把一头牛一天所吃的牧草看作\(1\),那么就有:
(1)\(27\)头牛\(6\)天所吃的牧草为:\(27×6=162\) (这\(162\)包括牧场原有的草和\(6\)天新长的草。)
(2)\(23\)头牛\(9\)天所吃的牧草为:\(23×9=207\) (这\(207\)包括牧场原有的草和\(9\)天新长的草。)
(3)\(1\)天新长的草为:\((207-162)÷(9-6)=15\)
(4)牧场上原有的草为:\(27×6-15×6=72\)
(5)每天新长的草足够\(15\)头牛吃,\(21\)头牛减去\(15\)头,剩下\(6\)头吃原牧场的草:\(72÷(21-15)=72÷6=12\)(天) ,所以养\(21\)头牛,\(12\)天才能把牧场上的草吃尽。
相关试题:
假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供110亿人生活90年,或供90亿人生活210年。为了能够实现可持续发展,避免资源枯竭,地球最多能够养活多少亿人?
(21090-11090)/(210-90)=75亿
二、本题分析
洛谷的评测任务是单位时间内均匀增加的。\(8\)台评测机\(30min\)可以刚好把评测队列中的程序评测完毕,\(10\)台评测机\(6min\)可以刚好把评测队列中的程序评测完毕。请问:几台评测机可以在\(10min\)时刚好把评测队列中的程序评测完毕?
分析:
著名的“牛吃草问题”的模型!
特点:
1、原来就有草。
2、一边吃来一边长。
3、先算时间长的,求出长的总量。
4、再算时间短的,求出时间差范围内的增量。
5、计算出增长速度。
6、任选一组数据,根据时间 * 速度,得到这段时间内的增量。
7、总量减增量得到原始量。
8、再根据题目要求,计算出其它,比如给\(10\)分钟时间,需要多少台机器等等。
本题分析过程:
假设\(1\)台评测机\(1min\)可以评测出\(1\)份程序。
1、\(8\)台评测机\(30min\)可以评测\(30*8=240\)道试题。
2、\(10\)台评测机\(6min\)可以评测\(10*6=60\)道试题。
3、在\(30-6=24min\)内,增加了\(240-60=180\)道试题,增加的速度为 \(180/24=7.5\)道。
4、在\(6min\)内,增长了 \(6 * 7.5=45\) 道,总数是\(60\)道,所以原来在开始前就有\(60-45=15\)道题。
5、题目要求是\(10min\)内,就是\(10 * 7.5=75\),再加了原始的试题量\(15\),就是\(90\)个需要评测的试题。在\(10\)分钟内,就是需要\(9\)台评测机。
C++代码
#include <bits/stdc++.h>
using namespace std;
int main() {
//题目给出的评测机数量和时间
int n1 = 8, t1 = 30, n2 = 10, t2 = 6;
int t3 = 10; //题目要求的时间10分钟
double inc_rate = (1.0 * n1 * t1 - n2 * t2) / (t1 - t2);//增长速度,注意1.0的用途
double init_num = n2 * t2 - inc_rate * t2;//初始化队列长度
double ans = (init_num + t3 * inc_rate) / t3;//求得答案
cout << ans << endl;
return 0;
}