经典算法求解!最小面积问题。100分等着你拿!(100分)

S

silicon

Unregistered / Unconfirmed
GUEST, unregistred user!
设一张卡片的大小为Width=157,Height=199;现在有N张这样的卡片(N<=X*Y),每行最多可以
排放X个卡片,(先假定X=20),每列最多可以排Y个卡片(可设Y=20).求解,怎么摆放可以得
到最小的面积?如25张卡可以摆成5行5列,(不超过X=20),26张卡片也可以摆成2*13或
13*2(不超过X=20)。
请给出一个函数,Function(N, X, Y: integer;var R, L: integer);
(N= 卡片张数;
X= 每行最多数量;
Y= 每列最多数量;
R= 求得最佳行数
L= 求得最佳列数
)
 
因为卡片的大小(面积)与数目一定,
所以,不论你如何摆放,面积都是一定的。
因此,此函数完全无用。
 
//怎么摆放可以得到最小的面积?
你的题目好像有问题喔! 照你的条件摆一张最小(必须摆放卡片的前提下)。
 
我的算法的根本的用途,是将一些大小相同的图片,合成一个大的图片,要求大的图片
的Canvas的Rect面积最小!
 
是不是这样的
比如有四个
可以排成
* *
* *
也可以排成
*
* *
*
当然前者的面积比后者小 ,是不是这样个意思。。。
 
是不是可以将原题理解为下面这个纯数学问题:
已知某正整数 N,以及 X,Y,现求两个正整数 R,L (R<=X, L<=Y)使得 R*L-N 最小
(但又要大于0)。
这样就很简单了,大致算法如下:
procedure Cal(N, X, Y: integer;var R, L: integer);
var
i,j,S,t:Integer;
begin
S:=N;
for i:=1 to Xdo
for j:=1 to Ydo
begin
t:=i*j-N;
if (t>=0) and (t<S) then
begin
S:=t;
R:=i;
L:=j;
end;
end;
end;

OK?
 
题目有问题
 
此函数完全无用。
 
多人接受答案了。
 
顶部