作者 海洋饼干叔叔
单位 重庆大学
题目描述
假设张家界景区的游客抵达检票口的速度是恒定的。某国庆长假日清晨景区开门时检票口已积聚了一定数量的游客,且随时间流逝,不断有新的游客抵达。如果打开8个检票口,m分钟刚好可以完成全部游客的检票放行;如果使用6个检票口,则需要n (n>m)分钟才能完成。请编程计算:如果使用10个检票口,需要多少时间才能将景区入口的待检票人数清零?
【分析】
这是小学奥数中著名的“牛吃草”问题。现假设每个检票口每分钟可以完成1份游客的检票放行任务。设景区开门时积聚的游客数量为x份,设每分钟有y份游客抵达检票口。然后列出方程组,根据方程组求解x,y。
然后,设使用10个检票口时,需要z分钟清零,根据x,y列方程,求出z。
输入格式:
m
n
说明:m,n为整数且n>m,且该输入确保问题有解。
输出格式:
原有排队游客份数:A, 每分钟新到游客份数:B, 10口同开需C分钟清零待检票游客.
说明:A, B, C均为保留1位小数的浮点数。
输入样例:
180
300
输出样例:
Original number of visitors: 900.0
New arriavlas per minute: 3.0
Check time when 10 gates are opened: 128.6
注意:从数学角度上看,900.0, 30.0均为份数,不是游客人数。
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
int main()
{
int m, n;
float A, B, C;
scanf("%d%d", &m, &n);
if (n > m)
{
B = (6.0 * n - 8.0 * m) / (n - m);
A = 2.0 * m * n / (n - m);
C = A / (10.0 - B);
}
printf("Original number of visitors : %.1f\n", A);
printf("New arriavlas per minute : %.1f\n", B);
printf("Check time when 10 gates are opened : %.1f\n", C);
return 0;
}
补充一下:
[牛吃早回题]'牛吃草'问题是大科学家牛顿提出的问题,也叫'牛顿问题'。
这类问题的难点在于要考虑草边吃边长这个因素。典型牛吃草问题的条件是假设草的生长速度固定不变,不同头数的牛吃光同一片草地所需的天数各不相同,求若干头牛吃这片草地可以吃多少天。由于吃的天数不同,草又是天天在生长的,所以草的存量随着吃的天数不断地变化。
[常用公式]
(1)草的生长速度=(对应的牛头数×吃的较多天数-相应的牛头数×吃的较少天数) ÷ (吃的较多天数-吃的较少天数) ;
(2)原有草量=牛头数x吃的天数-草的生长速度x吃的天数;
(3)吃的天数=原有草量÷(牛头数-草的生长速度) ;
(4)牛头数=原有草量÷吃的天数+草的生长速度。
这四个公式是解决牛吃草问题的基础。
此题中:
原有排队游客份数:A , A = 6.0 * n - B * n或者A = 8.0 * m- B * m,再将B代入A中,化简就能得到代码中的式子;B为公式一,C为公式三。