裝箱問題的編程解題報告


裝箱問題

假設有N項物品,大小分別為s1,s2,…si…sN,其中si為滿足1≤si≤100的整數。要把這些物品裝入到容量為100的一批箱子(序號1-N)中。裝箱方法是:對每項物品, 順序掃描箱子,把該物品放入足以能夠容下它的第一個箱子中。請寫一個程序模擬這種裝箱過程,並輸出每個物品所在的箱子序號,以及放置全部物品所需的箱子數目。

樣例

問題:

拿到題就懵,箱子的100容量不斷用,每次都要判斷之前用過的箱子容量夠不夠裝下一個東西,解決辦法就是數組二重循環,先固定物品,挨個遍歷箱子。

解題思路:

兩重循環,外循環是一個物品循環,內循環是箱子的循環,然后判斷箱子的100容量是否大於物品容量,然后記錄下該編號的箱子剩下的容量,之后,每一個物品,就遍歷箱子編號,因為編號都是從0開始,所以最后b=i+1,i是用了第幾個箱子的最后編號。
就題目中給的樣例,我來模擬一下裝箱的思路,下面是示意圖(最好先讀下代碼),如果讀者有不懂或者認為我有錯誤,歡迎大家留言批評指正!

流程圖

核心代碼,建議先看

for(k = 0;k<N;k++)
	{
		for (i = 0;;i++)
		{
			if (box[i] >= s[k])
			{
				box[i] -= s[k];
				printf("%d %d\n", s[k], i+1);
				
				if (i+1 > b)
					b = i+1;
				break;
			}
		}
	}
	printf("%d\n", b);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM