问题如下:
/** * 已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) * 一箱油可供一架飞机绕地球飞半圈,问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机? * (所有飞机从同一机场起飞,而且必须安全 返回机场,不允许中途降落,中间没有飞机场) */
代码如下:
public class Mathtest3 { public static void main(String[] args) { wenti2(); } /** * 已知: 每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) * 一箱油可供一架飞机绕地球飞半圈,问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机? * (所有飞机从同一机场起飞,而且必须安全 返回机场,不允许中途降落,中间没有飞机场) */ static void wenti2() { int zongjuli = 100; // 这个表示总共的距离. int youxiang = 50; // 这个表示邮箱大小 for(int i = 5; i < youxiang/2; i++) { System.out.println("前段加油:" + i + " , 总共需要出动飞机多少架:" + (qianduanxuyaodefeijishuliang(i) + houduanxuyaodefeijishuliang(i))); } } // 前段需要的飞机数量 static int qianduanxuyaodefeijishuliang(int x) { int nengjiayou = 50 - (2 * x); int kejiayou = x; if(nengjiayou > kejiayou) { return 1; } else if(nengjiayou > 0) { return kejiayou % nengjiayou == 0 ? kejiayou/nengjiayou : kejiayou/nengjiayou + 1; } else { return 100000; } } // 后段需要的飞机数量 static int houduanxuyaodefeijishuliang(int x) { int juli = x; int feiji = 1; while(juli < 50) { // 来一架飞机 feiji ++; // 能前进距离 int qianjin = (50 - (50-juli))/feiji; // 现在的距离 juli = juli + qianjin; } return feiji - 1; } }