// 参数分别为:所有的香蕉,要运输距离,一次最大运输量,每一米吃的 function getMaxRest(total = 100, dis = 50, trans = 50, eat = 1) { if (total < dis * eat) { return 0 } // 每个 while 循环代表前进 1m while (total > trans) { // 以每个 trans 为一个箱子划分(不够 trans 的也算一个),num 就代表你现在有几个箱子 let num = Math.ceil(total / trans) // 当剩余的香蕉所组成的这个箱子,不够往返一次 1m 的时候,放弃这个箱子,因为运输这个箱子是亏本的 if (total - (num - 1) * trans < eat * 2) { num-- } // n 代表将所有的箱子运输 1 米需要吃多少,-1 是因为最后一个箱子不需要往返 const n = 2 * num * eat - 1 total -= n dis-- } return total - dis * eat }
public static void main(String[] args) { int hou = 100;//香蕉数量 for (int i = 0; i < 50; i++) {//小于50是米数 if(hou>50){ hou = hou - 3; }else{ hou = hou - 1; } } System.out.println(hou); }
带50个走x米剩余(50-x)香蕉,放下(50-2x)香蕉在原地,携带x香蕉返回原点,x香蕉正好被路上消耗。带50香蕉走x米至前面放香蕉的地方,此时共有(100-3x)香蕉。
当50<(100-3x)时(x最大值为16)剩余x香蕉,应取x最大值即剩余16香蕉