C语言 数学问题

2025-04-11 03:04:08
推荐回答(1个)
回答1:

首先,这个题目有缺陷,也就是最后的未必是1滴。这和VUL D的取值都关。你只假设了最后一滴不到D毫升,有没有想过最后一滴大于D毫升的情形?
举个例子,如果VUL = 10 D = 2,那么一共就5滴,第一次滴1滴,第二次滴2滴,第三次的时候本来想滴3滴的,但只剩2滴了(4毫升>D),应该怎样滴?题目没说明噢~

那么姑且忽略你那些缺陷。这个类型题的数学模型也很简单,就是可以
1)先用VUL/D 求出滴数M,
2)然后用等差求和公式 n(1 + n)/2 <= M ,求出该不等式最大整数n的解
n使等号成立时,n-1就是停顿的次数,总秒数就是 n-1+M,(因为每一滴1秒)
n不能使等号成立时候,n就是停顿的次数,总秒数就是 n+M
由于你问题不严密,我也只能给你说的不严谨了。

这个算法C实现也很简单,n(1 + n)/2 <= M用for循环,每次计算保存结果,在大于的时候break即可。

当然你也可以直接用循环,不用这个数学模型,每次循环累加,记录的循环次数就是n

还有你给的代码不是很专业噢