驢商人和胡蘿蔔的演算法邏輯思維問題
阿新 • • 發佈:2019-01-05
題目如題:
一個商人騎一頭驢要穿越1000公里長的沙漠,去賣3000根胡蘿蔔。已知驢一次性可馱1000根胡蘿蔔,但每走1公里又要吃掉1根胡蘿蔔。問:商人最多可賣出多少胡蘿蔔?
在此用程式的解決,其實不用程式的也很簡單:
程式說明:
無論去返都消耗,以消耗最大來看!當運輸3000時要往、返共計5倍路程,所以最初1000根消耗完應該在200公里處(最後一次往返也是有用的,如果吃的必須是1000以內的蘿蔔);由此變為運輸2000,往、返共計3倍路程,第二個1000根消耗在533公里處(嚴格此時此處有1001根來說是消耗了999根,最後一根這裡不要了;這要看吃蘿蔔的限定了,結果可能差一根);最後1000根蘿蔔從533公里處出發,因而最後剩533根蘿蔔,呵呵用程式求解其實多少有點浪費。
#include <iostream.h> #include <math.h> int main() { int i = 0; //迴圈變數 int s = 1000; //總里程 int n = 3000; //總蘿蔔數 for(i = 0; i < s; i++) { //計算要分幾次搬運,是下取整。 int x = (int)ceil((double)n/1000); //如果回去搬蘿蔔的代價比搬過來的蘿蔔數量大,說明沒價值,不要返回去搬,扔了。 if(n % 1000 != 0 && n % 1000 <= x) { x -= 1; } //如果要回去多次搬運,則往返路程要計算好。兩次搬運要走三次路。 if(x == 2) { x += 1; } //如果要回去多次搬運,則往返路程要計算好。三次搬運要走五次路。一次搬運當然就一次路就OK了。 else if(x == 3) { x += 2; } //讓驢吃掉的蘿蔔。 n -= x; } cout << "商人最多可賣出的胡蘿蔔數量為:" << n << endl; return 0; }
得出結果:
商人最多可賣出的胡蘿蔔數量為:534
Press any key to continue