1 min read

某个车站发车时的总人数

正值新冠状病毒爆发的时刻,哪里也去不了,默默地替武汉人民加油!一定要挺住。

孩子给出的题目,据说是NOIP某一年的题目:

火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人。从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。现给出的条件是:共有n个车站,始发站上车的人数为a,最后一站下车的人数是m(全部下车)。试问第s站开出时车上的人数是多少?

工作时间长了,脑子跟浆糊一样。写代码处理的都是业务数据,做的大部分是掉包侠的工作。这种脑力训练实在是望而生畏。这道题放了接近一个月,没办法,孩子催的急,只好硬着皮头启动已经生锈的大脑。其中的关键是解出第2站上车的人数。从第4站开始,发车时的人数就是有规律的了,推导过程:

推导过程

rm(list=ls())
# 第一站上车人数
a = 5
#车站数量
n = 7
# 到站总人数
m = 32
# 发车站次,据此计算车上总人数
s = 4
# 从第4站开始,每站发车时的总人数可以写作 t1[i]*x + t2[i]*a 形式
# x表示第2站的上车人数
# t1[i] = t1[i-1] + t1[i-2] + 1
# t2[i] = t2[i-1] + t2[i-2] - 1
# a已知,求解出x后,每站上下完车的总人数根据公式就可以算出来
t1 = rep(0, n-1)
t2 = rep(0, n-1)

t1[1] = t1[2] = t1[3] = 0
t2[1] = t2[2]  = 1
t2[3] = 2
for (i in 4:(n-1)) {
  t1[i] = t1[i-1] + t1[i-2] + 1
  t2[i] = t2[i-1] + t2[i-2] - 1
}

#求解第二站上车人数x
x = (m - t2[n-1]*a)/t1[n-1]

#求每站发车时总人数
total = t1*x + t2*a

#打印出从s站发车时,车上的总人数
print(total[s])
## [1] 13