使用C演算法封裝盒子的嘗試

2021-08-14 01:06:42 字數 2145 閱讀 2799

李國帥 於2006.9

通過這個程式,我發現程式最重要的就是演算法和結構,在結構和演算法沒有弄清楚之前所有的勞動,所有的編碼都是白費工夫,因此在動手之前,盡一切努力,通過各種溝通途徑把邏輯關係搞清楚是最重要的事情.

十年前的東西了,這個演算法有很多漏洞,條件考慮不足,不過,依然可以看作對實際問題解決的一次嘗試,自己已經沒有精力做這玩意了,有高手可以看看如何解決。----2017.12.22

lucy 的問題

18*14*8.5cm的盒子,25盒裝乙個箱子,裝成方形的箱子,用那個尺寸的盒子裝在乙個方形的箱子裡面,那個需要多大尺寸的方形箱子。

/*

有這麼幾個限制條件

長寬高 後面加上空隙

h = 18*nx +14*ny +8.5*nz +ox

w = 18*nx +14*ny +8.5*nz +oy

l = 18*nx +14*ny +8.5*nz +oz

nx,nx,nx <= 24

最後的紙箱體積

h * w * l = 25*18*14*8.5 + ov

必須使的空餘的體積ov最小。

因為長寬高的空餘長度ox,oy,oz可以放在ov中計算,所以可以不用帶上。

建立**迴圈,依次求出正數ov,最後得到最小的ov時的nx,nx,nx

ov = h * w * l - 25*18*14*8.5

本來長寬高必須分別至少包含一長寬高的個數,但沒有必要進行過多的判斷。

長度、寬度,高度上分別至少有乙個nx,nx,nx

那也不行,對於每乙個長都要求乙個寬,然後要求乙個高。

所以需要9級迴圈,可以使用遞迴,最後再說。

*/#include

#include

#include

#include

#define wordmaxlen 1024

//double l=0,w=0,h=0;

int vnum = 3

;double hwl[3] = ;//

h,w,l

double ov = 0.0

;double l = 18, w = 14, h = 8.5

;double minline =h;

double maxline =l;

int maxnum = 25

;double tv = maxnum*l*w*h;

double minov = 100000000000.0

;double minh = 0, minw = 0, minl = 0

;file *stream;

int nxyz[3][3

];void getv(double& hwl, int nhwl, int

leftnum)

if (minov > 1500)continue

; fprintf(stream,

"nhwl(%d)hwl2(%.1f)hwl1(%.1f)hwl0(%.1f)minov(%.2f)\n

", nhwl, hwl[nhwl], hwl[nhwl + 1], hwl[nhwl + 2

], minov);

fprintf(stream,

"l: nx,ny,nz %d,%d,%d \n

", nxyz[0][0], nxyz[0][1], nxyz[0][2

]); fprintf(stream,

"w: nx,ny,nz %d,%d,%d \n

", nxyz[1][0], nxyz[1][1], nxyz[1][2

]); fprintf(stream,

"h: nx,ny,nz %d,%d,%d \n

", nxyz[2][0], nxyz[2][1], nxyz[2][2

]); }}}

else

getv(hwl[nhwl - 1], nhwl - 1, leftnum / (nx + ny +nz));}}

}}

}int main(int argc, char **argv)

ODB 基於c 的ORM對映框架嘗試 使用

摘要 2 使用 首先,需要定義乙個物件,用來和資料庫字段對應 cce lang cpp ifndef volume h define volume h include include pragma db object cl 2 使用 首先,需要定義乙個物件,用來和資料庫字段對應 cce lang c...

C 封裝POSIX 執行緒庫(四)使用封裝的執行緒

本文主要介紹如何使用c 封裝posix 執行緒庫 一 互斥鎖 c 封裝posix 執行緒庫 二 條件變數的封裝和c 封裝posix 執行緒庫 三 執行緒的封裝三文中介紹的posix pthread的基本元件 互斥鎖,條件變數和執行緒 c 封裝的使用。設計乙個場景讓我們用到這三個元件 一共啟動三個執行...

C 中常用的加密演算法的封裝

des加密是對稱加密演算法,對稱加密演算法的優點是速度快,缺點是金鑰管理不方便,要求共享金鑰 public class desencrypt des加密 需要加密的值 加密後的結果 public string encrypt string text des解密 需要解密的值 解密後的結果 publi...