1. 程式人生 > >驢商人和胡蘿蔔的演算法邏輯思維問題

驢商人和胡蘿蔔的演算法邏輯思維問題

題目如題:

一個商人騎一頭驢要穿越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