導航:首頁 > 源碼編譯 > 整理空箱子演算法題

整理空箱子演算法題

發布時間:2023-03-25 04:43:51

『壹』 有一批橘子,每箱裝15千克,可以裝60箱,如果每箱裝18千克,可以空出幾個箱子

有一批橘子,每箱野兆裝15千克,可以裝60箱,坦脊伍如果每箱裝18千克,可讓或以空出幾個箱子?
60一15x60÷18
=60一900÷18
=60一50
=10(個)
答:每箱裝18千克可以空出10個箱子。

『貳』 K個相同的小球放入N個不同的箱子可空

把N個箱子想像成N個隔間
1號拿如小球有N個空隙可以插入,一號小或敏陸球放入後,
然後2號小球有N+1個位衫頃置可以插入(因為1號小球的插入,是原來的N個空隙變成了N+1個),
...
K號小球有N+K-1個位置可以插入
所以總計有N*(N+1)*...*(N+K-1)中情況
但是這裡面小球是不做區分的,也就是小球的編號沒有意義的
那上面的N*(N+1)*...*(N+K-1)中情況 中的 區別不包括小球的編號,只與隔間的編號有關,只要有一個隔間中小球的數量是不一樣的就認為不是同一種情況 這些情況組成一個集合A
考慮集合A中的任意一個元素,只要將其中的小球抹去編號,然後重新賦予編號,那麼,K的個小球就有
K!個選擇(1號可以賦予K個小球中的任意一個,2號可以賦予K-1個小球,以此類推)
所以N*(N+1)*...*(N+K-1) / K! 就是不區分小球編號的情況數

『叄』 一個箱子有些蘋果旦100不夠,這些蘋果分成

答案是肯定的.
1、這100個箱子里,肯定有箱子里的水果數目不為空,題目的意思里應該沒有包括不放水果這一條件的.
2、既然有箱子不為空,那麼,再審查第二步.題目問能不能找到這樣一組排列,那麼只要給出一種排列演算法,總能滿足題目要求即可,那麼這種演算法就是:將這100個箱子按水果數目從多至少排列,取前51個箱子,就可以滿足條件了(如果每個箱子兆斗里裝的水果只有一種,這種方法就可以達到題目要求了).
3、注意的是,第2步里只能保證總水果總數目大於另49個箱子里水果的總數目,不能保證三樣水果各自的數族碼磨目都大於另49個箱子里的數目模亮.這就要求進行如下的調整:如果第一個箱子里水果有多種,那麼按水果各類,再進行11#號12#號和13#號這樣排列,相當於把第一個箱子分成三個箱子.第二個箱子也如此分類.這樣就相當於對300個箱子進行排列,這樣的結果就可以滿足題目的要求了.

『肆』 集裝箱演算法問題 急!!!

我這樣舉例樓主應該會清楚些。

20尺櫃:內容積為5.69米X2.13米X2.18米,配貨毛重一般為17.5噸,體積為24-26立纖缺方米.
40尺櫃:內容積為11.8米X2.13米X2.18米,配貨毛重一般為22噸,體積為54立方米.
40尺高櫃:內容積為11.8米X2.13米X2.72米.配貨毛帶喊重一般為22噸,體積為68立方米.
45尺高櫃:內容積為:13.58米X2.34米X2.71米,配貨毛重一般為29噸,體積為86立方米.
一個櫃子能裝多少箱的演算法如下:(舉例四十尺櫃)
1. 先算一個產品外箱的體積:(外箱包裝尺寸)
1.2m X 0.45m X 0.66m = 0.3564cbm
2. 算一個40『能裝多少箱, 40『可按57cmb來蠢豎野算
57 / 0.3564 = 160箱

『伍』 裝箱問題、裝箱演算法

裝箱問題一般都是通過貪心演算法來求解的。隨便翻本數據結構的書上都會有詳細的介紹。網上也一定很多,自己找找哈。大概的思路是這樣的:

//依次將零件放到它第一個能放下的箱中,設11種零件的尺寸是按從讓森鏈大到小的順序排列(可以先對11種零件按尺寸大小從大到小排序),然後按排序結果對零件重新編號。

簡單地用偽代碼描述下演算法吧:

{
輸入箱子的尺寸;
按零件尺寸把11種零件從大到小排列,輸入各尺寸。
預置已用箱子鏈為空;
預置已用箱子計數器count為0;
for(i=0;i<n;i++)
{
從已用的第一隻箱子開始順序尋找能放入零件i的箱子j;
if(已用箱子坦孫都不能再放下零件i)
{
另用一隻箱子春銀,並將零件i放入該箱子;
count++;
}
else 將零件i放入箱子j;
}
}

『陸』 求程序:裝箱問題的近似演算法--NF ( Next Fit ) 演算法。謝謝幫助!

看看這個思路怎麼樣,好像代碼略多。
import java.util.Random;
import java.util.Scanner;
public class FillBox {
private Scanner scann;
private int objNum;
private int boxNum;
private int boxLength;
private Goods[] mGoods;
private Random random;
private Box[] mBox;
public FillBox(){
scann=new Scanner(System.in);
random=new Random();
objNum=getArgsFormConsol("請輸入物品個數objNum:");
boxNum=getArgsFormConsol("請輸箱子個數boxNum:");
boxLength=getArgsFormConsol("請輸箱子長度(單位CM)boxLength:");
//設置物品數組
setGoodsArray(objNum,boxLength);
//設置箱子數組
setBoxAry(boxNum,boxLength);
//開始裝箱子
doFillBox();
//物品的大小情況
showGoodsMessage();
//顯示裝箱情況
showBoxUse();
}
public static void main(String[] args){
new FillBox();
}
public int getArgsFormConsol(String pIntroction){
System.out.print(pIntroction);
int result=scann.nextInt();
System.out.println("***************\n");
return result;
}
public void setGoodsArray(int pNum,int pSize){
mGoods=new Goods[pNum];
for(int i=0;i<pNum;i++){
int goodSize=pSize/4+random.nextInt(pSize/3);
Goods goods=new Goods(i,goodSize);
mGoods[i]=goods;
}
}
public void setBoxAry(int pTolNum,int pSize){
mBox=new Box[pTolNum];
for(int i=0;i<pTolNum;i++){
Box aBox=new Box(i,pSize);
mBox[i]=aBox;
}
}
public void doFillBox(){//明跡族開支裝箱子
int aBoxSpaceValue=boxLength;
int currentBoxId=0;
for(int i=0;i<mGoods.length;i++){
if(currentBoxId>=boxNum){
System.out.println("已經沒有足夠的可用的箱子了!"激弊);
break;
}
Goods aGod=mGoods[i];
if(mGoods[i].getGoodsLength()<=aBoxSpaceValue){
//裝進這個箱子
mBox[currentBoxId].addGoods(aGod.getGoodsNum());
aBoxSpaceValue-=mGoods[i].getGoodsLength();
}else{
mBox[currentBoxId].setSpaceValue(aBoxSpaceValue);
aBoxSpaceValue=boxLength;//可用長度變長boxLength
currentBoxId++;
i--;//這個州消貨物裝不下了,換下一個箱子
}
}
}
public void showBoxUse(){
System.out.println("=====================\n下面是裝箱詳細情況:\n====================");
for(int i=0;i<boxNum;i++){
System.out.println("\n"+mBox[i].getShow()+"\n* * * * * * * * * * * * * * *");
}
}
public void showGoodsMessage(){
for(int i=0;i<objNum;i++){
System.out.println("boxID:"+mGoods[i].getGoodsNum()+", box長度:"+mGoods[i].getGoodsLength());
}
}
}

public class Goods {
private int goodsNum;
private int goodsLength;
public Goods(){
}
public Goods(int pNum,int pLength){
this.goodsNum=pNum;
this.goodsLength=pLength;
}
public int getGoodsNum() {
return goodsNum;
}
public void setGoodsNum(int goodsNum) {
this.goodsNum = goodsNum;
}
public int getGoodsLength() {
return goodsLength;
}
public void setGoodsLength(int goodsLength) {
this.goodsLength = goodsLength;
}
}

import java.util.Vector;
public class Box {
private int boxNum;
private int boxLength;
private Vector<Integer> containGoodsID;
private int spaceValue;
public Box(){
}
public Box(int pNum,int pLength){
this.boxNum=pNum;
this.boxLength=pLength;
containGoodsID=new Vector<Integer>();
spaceValue=boxLength;
}
public int getBoxNum() {
return boxNum;
}
public void setBoxNum(int boxNum) {
this.boxNum = boxNum;
}
public int getBoxLength() {
return boxLength;
}
public void setBoxLength(int boxLength) {
this.boxLength = boxLength;
}
public void addGoods(Integer pGoodsID){
containGoodsID.add(pGoodsID);
}
public void removieGoods(Integer pGoodsID){
containGoodsID.removeElement(pGoodsID);
}
public int getSpaceValue() {
return spaceValue;
}
public void setSpaceValue(int spaceValue) {
this.spaceValue = spaceValue;
}
public String getShow(){
StringBuffer sb=new StringBuffer("箱子編號:"+this.boxNum+" 長度:"+this.boxLength+" 可用空間:"+spaceValue+"\n本箱子裝的貨物編號:");
for(int i=0;i<containGoodsID.size();i++){
sb.append(containGoodsID.get(i)+", ");
}
return sb.toString();
}
}

可能修飾性的代碼比較多,關鍵邏輯就看doFill()了

『柒』 裝箱問題的BFD演算法

NP不完全問題只給0分是沒人做的,給200分做恐沒賣怕都很難呀.
我做過二維的NP排料問題,很麻煩的.三維的要更難了乎清!
祝歲察前你好運!

『捌』 C語言 動態規劃 完全裝箱問題

【問題】 裝箱問題
問題描述:裝箱問題可簡述如下:設有編號為0、1、…、n-1的n種物品,體積分別為v0、v1、…、vn-1。將這n種物品裝到容量都為V的若干箱子里。約定這n種物品的體積均不超過V,即對於0≤i<n,有0<vi≤V。不同的裝箱方案所需要的箱子數目可能不同。裝箱問題要求使裝盡這n種物品的箱子數要少。
若考察將n種物品的集合分劃成n個或小於n個物品的所有子集,最優解就可以找到。但所有可能劃分的總數太大。對適當大的n,找出所有可能的劃分要花費的時間是無法承受的。為此,對裝箱問題採用非常簡單的近似演算法,即貪婪法。該演算法依次將物品放到它第一個能放進去的箱子中,該演算法雖不能保證找到最優解,但還是能找到非常好的解。不失一般性,設n件物品的體積是按從大到小排好序的,即有v0≥v1≥…≥vn-1。如不滿足上述要求,只要先對這n件物品按它們的體積從大到小排序,然後按排序結果對物品重新編號即可。裝箱演算法簡單描述冊搭如下:
{ 輸入箱子的容積;
輸入物品種數n;
按體積從大到小順序,輸入各物品的體積;差喊
預置已用箱子鏈為空;
預置已用箱子計數器box_count為0;
for (i=0;i { 從已用的第一隻箱子開始順序尋找能放入物品i 的箱子j;
if (已用箱子都不能再放物品i)
{ 另用一個箱子,並將物品i放入該箱子;
box_count++;虛姿野
}
else
將物品i放入箱子j;
}
}
上述演算法能求出需要的箱子數box_count,並能求出各箱子所裝物品。下面的例子說明該演算法不一定能找到最優解,設有6種物品,它們的體積分別為:60、45、35、20、20和20單位體積,箱子的容積為100個單位體積。按上述演算法計算,需三隻箱子,各箱子所裝物品分別為:第一隻箱子裝物品1、3;第二隻箱子裝物品2、4、5;第三隻箱子裝物品6。而最優解為兩只箱子,分別裝物品1、4、5和2、3、6。

若每隻箱子所裝物品用鏈表來表示,鏈表首結點指針存於一個結構中,結構記錄尚剩餘的空間量和該箱子所裝物品鏈表的首指針。另將全部箱子的信息也構成鏈表。以下是按以上演算法編寫的程序。
【程序】
# include
# include
typedef struct ele
{ int vno;
struct ele *link;
} ELE;
typedef struct hnode
{ int remainder;
ELE *head;
Struct hnode *next;
} HNODE;

void main()
{ int n, i, box_count, box_volume, *a;
HNODE *box_h, *box_t, *j;
ELE *p, *q;
Printf(「輸入箱子容積\n」);
Scanf(「%d」,&box_volume);
Printf(「輸入物品種數\n」);
Scanf(「%d」,&n);
A=(int *)malloc(sizeof(int)*n);
Printf(「請按體積從大到小順序輸入各物品的體積:」);
For (i=0;i Box_h=box_t=NULL;
Box_count=0;
For (i=0;i { p=(ELE *)malloc(sizeof(ELE));
p->vno=i;
for (j=box_h;j!=NULL;j=j->next)
if (j->remainder>=a[i]) break;
if (j==NULL)
{ j=(HNODE *)malloc(sizeof(HNODE));
j->remainder=box_volume-a[i];
j->head=NULL;
if (box_h==NULL) box_h=box_t=j;
else box_t=boix_t->next=j;
j->next=NULL;
box_count++;
}
else j->remainder-=a[i];
for (q=j->next;q!=NULL&&q->link!=NULL;q=q->link);
if (q==NULL)
{ p->link=j->head;
j->head=p;
}
else
{ p->link=NULL;
q->link=p;
}
}
printf(「共使用了%d只箱子」,box_count);
printf(「各箱子裝物品情況如下:」);
for (j=box_h,i=1;j!=NULL;j=j->next,i++)
{ printf(「第%2d只箱子,還剩餘容積%4d,所裝物品有;\n」,I,j->remainder);
for (p=j->head;p!=NULL;p=p->link)
printf(「%4d」,p->vno+1);
printf(「\n」);
}
}

閱讀全文

與整理空箱子演算法題相關的資料

熱點內容
操作系統代碼編譯 瀏覽:479
程序員東北大學 瀏覽:426
編譯忽略空字元 瀏覽:117
多店鋪阿里雲伺服器教程 瀏覽:378
單片機求初值 瀏覽:420
安卓機如何在電腦備份圖片 瀏覽:925
ca證書加密機價格 瀏覽:798
天乾地支年份演算法 瀏覽:796
程序員打造的視頻 瀏覽:7
java和php通信 瀏覽:680
為什麼黑程序員 瀏覽:163
程序員男生 瀏覽:456
戴爾文件夾內文件怎麼置頂 瀏覽:582
雲伺服器6m網速 瀏覽:722
vivo手機中國聯通伺服器地址 瀏覽:862
工程總控編譯失敗 瀏覽:707
燕趙紅楓app如何下載 瀏覽:867
php查殺軟體 瀏覽:878
教育管理學pdf 瀏覽:547
伺服器均衡怎麼使用 瀏覽:626