裝箱問題
假設有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);
