看到一个有趣的数学问题,据说是小学4年级的题目,摘引如下:

一只小猴摘了300个香蕉,需要搬回家,每次最多搬100个。小猴离家100米,它每走1米,都需要吃掉1个香蕉来补充能量,请问它最多能够搬回家多少个?

思考了好一会,写了个小程序模拟这一过程:

$bananas = 300;

for($i = 1; $i <= 100; $i++)
{
    // 前200~300个的时候,每一米消耗5个,可以走20米
    if($bananas > 200)
        $bananas -= 5;
    // 100~200个的时候每一米消耗3个,可以走33米,也(100+99)走了53米
    else if($bananas > 101)
        $bananas -= 3;
    // 最后还有101个,接下来就可以带100个走不到47米(1个可以抵消0.33米以下),所以100-47+1=54个
    else
        $bananas--;
        
    echo '剩余香蕉数:'.$bananas.',剩余路程:'.(100 - $i).'<br>';
}

echo $bananas;

程序运行结果:

剩余香蕉数:295,剩余路程:99
剩余香蕉数:290,剩余路程:98
剩余香蕉数:285,剩余路程:97
剩余香蕉数:280,剩余路程:96
剩余香蕉数:275,剩余路程:95
剩余香蕉数:270,剩余路程:94
剩余香蕉数:265,剩余路程:93
剩余香蕉数:260,剩余路程:92
剩余香蕉数:255,剩余路程:91
剩余香蕉数:250,剩余路程:90
剩余香蕉数:245,剩余路程:89
剩余香蕉数:240,剩余路程:88
剩余香蕉数:235,剩余路程:87
剩余香蕉数:230,剩余路程:86
剩余香蕉数:225,剩余路程:85
剩余香蕉数:220,剩余路程:84
剩余香蕉数:215,剩余路程:83
剩余香蕉数:210,剩余路程:82
剩余香蕉数:205,剩余路程:81
剩余香蕉数:200,剩余路程:80
剩余香蕉数:197,剩余路程:79
剩余香蕉数:194,剩余路程:78
剩余香蕉数:191,剩余路程:77
剩余香蕉数:188,剩余路程:76
剩余香蕉数:185,剩余路程:75
剩余香蕉数:182,剩余路程:74
剩余香蕉数:179,剩余路程:73
剩余香蕉数:176,剩余路程:72
剩余香蕉数:173,剩余路程:71
剩余香蕉数:170,剩余路程:70
剩余香蕉数:167,剩余路程:69
剩余香蕉数:164,剩余路程:68
剩余香蕉数:161,剩余路程:67
剩余香蕉数:158,剩余路程:66
剩余香蕉数:155,剩余路程:65
剩余香蕉数:152,剩余路程:64
剩余香蕉数:149,剩余路程:63
剩余香蕉数:146,剩余路程:62
剩余香蕉数:143,剩余路程:61
剩余香蕉数:140,剩余路程:60
剩余香蕉数:137,剩余路程:59
剩余香蕉数:134,剩余路程:58
剩余香蕉数:131,剩余路程:57
剩余香蕉数:128,剩余路程:56
剩余香蕉数:125,剩余路程:55
剩余香蕉数:122,剩余路程:54
剩余香蕉数:119,剩余路程:53
剩余香蕉数:116,剩余路程:52
剩余香蕉数:113,剩余路程:51
剩余香蕉数:110,剩余路程:50
剩余香蕉数:107,剩余路程:49
剩余香蕉数:104,剩余路程:48
剩余香蕉数:101,剩余路程:47
剩余香蕉数:100,剩余路程:46
剩余香蕉数:99,剩余路程:45
剩余香蕉数:98,剩余路程:44
剩余香蕉数:97,剩余路程:43
剩余香蕉数:96,剩余路程:42
剩余香蕉数:95,剩余路程:41
剩余香蕉数:94,剩余路程:40
剩余香蕉数:93,剩余路程:39
剩余香蕉数:92,剩余路程:38
剩余香蕉数:91,剩余路程:37
剩余香蕉数:90,剩余路程:36
剩余香蕉数:89,剩余路程:35
剩余香蕉数:88,剩余路程:34
剩余香蕉数:87,剩余路程:33
剩余香蕉数:86,剩余路程:32
剩余香蕉数:85,剩余路程:31
剩余香蕉数:84,剩余路程:30
剩余香蕉数:83,剩余路程:29
剩余香蕉数:82,剩余路程:28
剩余香蕉数:81,剩余路程:27
剩余香蕉数:80,剩余路程:26
剩余香蕉数:79,剩余路程:25
剩余香蕉数:78,剩余路程:24
剩余香蕉数:77,剩余路程:23
剩余香蕉数:76,剩余路程:22
剩余香蕉数:75,剩余路程:21
剩余香蕉数:74,剩余路程:20
剩余香蕉数:73,剩余路程:19
剩余香蕉数:72,剩余路程:18
剩余香蕉数:71,剩余路程:17
剩余香蕉数:70,剩余路程:16
剩余香蕉数:69,剩余路程:15
剩余香蕉数:68,剩余路程:14
剩余香蕉数:67,剩余路程:13
剩余香蕉数:66,剩余路程:12
剩余香蕉数:65,剩余路程:11
剩余香蕉数:64,剩余路程:10
剩余香蕉数:63,剩余路程:9
剩余香蕉数:62,剩余路程:8
剩余香蕉数:61,剩余路程:7
剩余香蕉数:60,剩余路程:6
剩余香蕉数:59,剩余路程:5
剩余香蕉数:58,剩余路程:4
剩余香蕉数:57,剩余路程:3
剩余香蕉数:56,剩余路程:2
剩余香蕉数:55,剩余路程:1
剩余香蕉数:54,剩余路程:0