例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;
}
posted @ 2021-06-30 16:53  糖豆爸爸  阅读(1192)  评论(0编辑  收藏  举报
Live2D