抖音高校数学挑战题
题目描述:
一根弹性均匀的橡皮筋长5米,
一只小蚂蚁从一端爬向另一端。
小蚂蚁每天沿着橡皮筋爬1米。
小蚂蚁每爬1米,橡皮筋就被瞬间拉长5米。
问多少天小蚂蚁可以爬到橡皮筋的另一端?
提示:
-
理想条件下,小蚂蚁不会死,橡皮筋不会被拉断。
-
弹性均匀表示按比例拉长
思路1:
先分析,看一下规律:
第一天,皮筋长度5米,小蚂蚁爬了1米,到了1/5处
第二天,皮筋长度10米,小蚂蚁爬了1米,到了1/5+1/10处
第三天,皮筋长度15米,小蚂蚁爬了1米,到了1/5+1/10+1/15处
......
第n天,皮筋长度5n米,小蚂蚁爬了1米,到了1/5 (1+1/2+1/3+...1/n)处,且其=1.
也就是求1/5 (1+1/2+1/3+...1/n)=1,或者1+1/2+1/3+...1/n=5,这是一道级数调和题。
手工计算是非常复杂的,我们用程序来实现:
C语言示例:
int main() {
int day = 0;
double v = 0.0;
while (v < 5) {
day = day + 1;
v = v + (1.0 / day);
}
printf("一共爬了%d天",day);
return 0;
}
输出:
一共爬了83天
思路2:
首先我们要知道:皮筋拉长,爬的长度与总长度的比例不变。
第一天,爬1米,占比是1/5,然后皮筋拉长5米,现在皮筋长10米,拉长后是爬了(1/5)*10米=2米。
第二天,爬1米,占比是3/10,然后皮筋拉长5米,现在皮筋长15米,拉长后是爬了(3/10)*15米=4.5米。
......
根据第一天、第二天的爬行分析,我们可以发现每天会爬的更远,爬的速度一定会超过皮筋变长的速度。第1天+第2天+第3天+...+第n天爬的总长度 ≥ 皮筋的长度就算爬完总路程。
C语言示例:
int main() {
int day = 0; // 爬的天数,初始为0天
int length = 5; // 皮筋的初始长度5米
double v = 0.0; // 蚂蚁走的路程,初始为0米
while (v < length) { // 走的路程不小于皮筋的长度就算走完
v = v + 1; // 每天先走1米
double ratio = v / length; // 记录当前比例,后面用于更新拉长皮筋之后的路程
length = length + 5; // 皮筋拉长5米,原路程与皮筋的长度比例不变
v = length * ratio; // 根据比例不变,计算皮筋拉长后的新路程
// 以上就是一天下来走的路程和皮筋变化的新长度
day++; // 天数+1
}
printf("一共爬了%d天\t共走了%.3f米\t皮筋长度为%d米", day, v,length);
return 0;
}
输出:
一共爬了83天 共爬了420.174米 绳子长度为420米
总结:
第一种思路是将问题转为有规律的公式求解,相对好理解;第二种思路更直白,就按照题意直接计算。