《蚂蚁爬皮筋问题》数学编程题

93 阅读3分钟

抖音高校数学挑战题

题目描述:

一根弹性均匀的橡皮筋长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米

总结:

第一种思路是将问题转为有规律的公式求解,相对好理解;第二种思路更直白,就按照题意直接计算。