一輛吉普車來到1000km寬的沙漠邊沿。吉普車的耗油量為1l/km,**油量為500l。顯然,吉普車必須用自身油箱中的油在沙漠中設幾個臨時 加油點,否則是通不過沙漠的。假設在沙漠邊沿有充足的汽油可供使用,那麼吉普車應在哪些地方、建多大的臨的加油點,才能以最少的油耗穿過這塊沙漠?
從這個題目來看,這是乙個極限問題,求得是最少耗油的量,所以只有唯一答案。
1、為了穿越這個沙漠,同時耗油量最少,那麼吉普車就應該每次出發的時候都要滿油量出發。
2、為了保證每一次都是滿油量的從每個臨時加油站出發,那麼每乙個臨時加油站的油量儲備都應該是500l的倍數。
3、為了保證耗油量最少,每一次建立乙個臨時加油站的時候,運輸的次數也是越少越好,減少重複的路段。
4、如果這道題通過遞推法正推的話很難確定第乙個臨時加油站的地點。
5、所以這裡我們用倒推法來做。
6、假設我們已經到達了b點,這個時候b點的儲油量應該0,這是可以倒推c1點的儲油量應該為500l,這時候可以剛好到達終點b。好了現在我們知道c1點的儲油量了,也就知道了c1到b點的距離為500公尺。
7、這時候我們應該想,如果向c1點運輸500l的油量,c2點應該儲存多少油呢?根據上面的步驟2(臨時加油站的油量儲備都應該是500l的倍數)和步驟3(運輸的次數也是越少越好,這裡肯定是兩次或者兩次以上才能向c1點運輸500l油,這裡取2次),那麼我們就知道了c2點的儲油量應該是500l*2,也就是1000l油。這時,c2到c1的距離為500/3。
8、如果想c2點運輸1000l的油,重複步驟7可知,c3點儲存油量為500×3l,c3到c2的距離為500/5。
9、所以到達臨時加油站cn的時候,儲油量應該是500×n,cn到cn-1的距離為500/2n-1。
所以這裡通過下面這個式子算出n:
500+500/3+500/5+500/(2n-1) = 1000;
然後就可以得出最少耗油量。
public
class
desert
//需要設定補給站點,每個站點的儲存量為單次的最大負載的整數倍
double dis=distance;
int i=0;
//站點個數
while
(dis < totaldistance)
int num=i;
double totaloil =0;
while
(i>0)
system.out.
println
("第"
+(num-i)
+"個站點為距離起點"
+(totaldistance-dis)
+"處,儲存量為"
+oilper*i+
"l");}
system.out.
println
("總耗油量為"
+totaloil+
"l");}
public
static
void
main
(string[
] args)
}
第1個站點為距離起點22.433122433122435處,儲存量為3000.0l
第2個站點為距離起點60.89466089466089處,儲存量為2500.0l
第3個站點為距離起點106.34920634920638處,儲存量為2000.0l
第4個站點為距離起點161.90476190476193處,儲存量為1500.0l
第5個站點為距離起點233.33333333333337處,儲存量為1000.0l
第6個站點為距離起點333.33333333333337處,儲存量為500.0l
第7個站點為距離起點500.0處,儲存量為0.0l
總耗油量為3291.630591630592l
某王國對囚犯進行大赦,讓一獄吏n次通過一排鎖著的n間牢房,每通過一次按所定規則轉動門鎖,每轉動一次,原來鎖著的被開啟,原來開啟的被鎖上;通過n次後,門鎖開著的,牢房中的犯人放出,否則犯人不得獲釋.轉動門鎖的規則是這樣的,第一次通過牢房,要轉動每一把門鎖,即把全部鎖開啟;第二次通過牢房時,從第二間開始轉動,每隔一間轉動一次;第k次通過牢房,從第k間開始轉動,每隔k-1 間轉動一次;問通過n次後,哪些牢房的鎖仍然是開啟的?
牢房可以視作乙個一元陣列,1代表鎖著,0代表開鎖。
規律:當鎖的標號為乙個數的平方時,那麼最後它會開著。
public
class
warder
system.out.
println
("牢房數為"
+n+"時");
int k,j;
for(i=
1;i<=n;i++
)else
}for
(j=0
;jsystem.out.
println
("是開鎖的");
}}public
void
lawwarder
(int n)
} system.out.
println
("是開鎖的");
}public
static
void
main
(string[
] args)
}
暴力法
牢房數為10時
第1次通過牢房1、2、3、4、5、6、7、8、9、10、是開鎖的
第2次通過牢房1、3、5、7、9、是開鎖的
第3次通過牢房1、5、6、7、是開鎖的
第4次通過牢房1、4、5、6、7、8、是開鎖的
第5次通過牢房1、4、6、7、8、10、是開鎖的
第6次通過牢房1、4、7、8、10、是開鎖的
第7次通過牢房1、4、8、10、是開鎖的
第8次通過牢房1、4、10、是開鎖的
第9次通過牢房1、4、9、10、是開鎖的
第10次通過牢房1、4、9、是開鎖的
規律法牢房數為10時
1、4、9、是開鎖的
遞推法 穿越沙漠問題
吉普車試圖穿越 x km 寬的沙漠,吉普車耗油率1l km,油量 500l,對於 x 500,吉普車需要設定臨時儲油點,以穿越沙漠。現在,我們需要對於輸入的 x 值,計算最少的耗油量。其中,0 x 3000.在思考這道題之前,我們先考慮幾個常識性問題 1 越往沙漠深處的儲油點送油,所消耗的油量更多 ...
穿越沙漠問題,飛機加油問題
一輛吉普車來到1000km寬的沙漠邊沿。吉普車的耗油量為1l km,油量為500l。顯然,吉普車必須用自身油箱中的油在沙漠中設幾個臨時 加油點,否則是通不過沙漠的。假設在沙漠邊沿有充足的汽油可供使用,那麼吉普車應在哪些地方 建多大的臨的加油點,才能以最少的油耗穿過這塊沙漠?本題是乙個極值問題,要求具...
C語言問題之穿越雷區
x星的坦克戰車很奇怪,它必須交替的穿越正能量輻射區和負能量輻射區才能正常運轉,否則將報廢。某坦克需要從a區到b區去 a,b區本身是安全去,其它區都標了正號或負號分別表示正負能量輻射區。例如 a b 坦克只能水平或垂直方向上移動到相鄰的區。資料格式要求 輸入第一行是乙個整數n,表示方陣的大小,4 n ...