?? oil.cpp
字號:
// oil.cpp : Defines the entry point for the console application.
//
/*
問題介紹:
每個飛機只有一個油箱,飛機之間可以相互加油(注意是相互,沒有加油機),一箱油可供一架飛機繞地球飛半圈。
問:為使至少一架飛機繞地球一圈回到起飛時的飛機場,至少需要出動幾架飛機?
(所有飛機從同一機場起飛,而且必須都安全返回機場,不允許中途降落,中間沒有飛機場)
解題思路:
遞歸方案。設最終有一架能飛完全一圈,而一架最多裝油半圈,故它需
要補充半圈油。羊毛出在羊身上,我們來找那頭羊好了,嘻嘻。這半圈油當然
出在別的飛機身上,而別的飛機又抽別別的飛機。。。遞歸終止條件:當某一架飛
機被抽完其它飛機“僅僅所需的油”后,它還能安全飛回基地。遞歸結束。
具體細節:
一架飛機在1/4全程點上如能滿油(即得到1/4的補充量),它就能飛回。因為3/4點同樣可補到1/4的量(注意地球是圓的,可兩邊補)。 那么1/4全程點時它可抽其它飛機的,然后它可飛回了,但然后其它飛機飛不回怎么辦呢?再用解決剛才那"飛全程飛機的方法"來解決其它飛機,遞歸下去...直到有飛機被人抽后還能夠油飛回基地。(注意每次補充量只需它總的補充量的一半就行哦)
*/
#include "stdafx.h"
#include "oil.h"
void fly(double journey, double oil)
{
if ( journey-oil>0 )
{
count++;
fly(journey-oil, Max-0.5*(journey-oil));
}
}
int main()
{
printf("從同一地點出發的相同型號的飛機,可是每架飛機裝滿油\n");
printf("只能繞地球飛半周,飛機之間可以加油,加完油的飛機必\n");
printf("須回到起點。問至少要多少架次,才能滿足有一架繞地球一周。\n");
count++;
fly(2,1);
printf("答案:飛機共 %d架\n", count);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -