长方形可用最少正方形来代替 :
一个长方形的面积,能用最少几个正方形的面积来代替?
如:长方形3*2,可以使用正方形:〔2, 1〕,(1, 2)来代替;
中(m, n),m表示正方形的边长,n表示个数
3*2 = 2*2*1 + 1*1*2
///////////////////////////////////////////////////////////////////////////
//程序未优化!
///////////////////////////////////////////////////////////////////////////
#define min(m, n) ((m < n) ? m : n)
#define max(m, n) ((m > n) ? m : n)
/*
*int area:剩余面积
* int rlength:边长
* int rwidth:边长
*/
int Rect(int area, int rlength, int rwidth)
{
int sw = 0; //最小边长
int gw = 0; //最大边长
int sarea = 0;//剩余面积
int nCount = 0; //个数
if(area <= 0)
{
return 0x00;
}
sw = min(rlength, rwidth);
gw = max(rlength, rwidth);
nCount = area / (sw*sw);
sarea = area - nCount*sw*sw;
if(sarea >= 0 && sw > 0 && nCount >0)
{
printf(" [%d, %d]/t", sw, nCount);
}
gw--;
sw--;
Rect(sarea, gw, sw);//使用递归方式实现
return 0;
}
int main(int argc, char* argv[])
{
int count = 0;
int length = 3;
int width = 2;
Rect(length * width, length, width);
return 0;
}
一个长方形的面积,能用最少几个正方形的面积来代替?
如:长方形3*2,可以使用正方形:〔2, 1〕,(1, 2)来代替;
中(m, n),m表示正方形的边长,n表示个数
3*2 = 2*2*1 + 1*1*2
///////////////////////////////////////////////////////////////////////////
//程序未优化!
///////////////////////////////////////////////////////////////////////////
#define min(m, n) ((m < n) ? m : n)
#define max(m, n) ((m > n) ? m : n)
/*
*int area:剩余面积
* int rlength:边长
* int rwidth:边长
*/
int Rect(int area, int rlength, int rwidth)
{
int sw = 0; //最小边长
int gw = 0; //最大边长
int sarea = 0;//剩余面积
int nCount = 0; //个数
if(area <= 0)
{
return 0x00;
}
sw = min(rlength, rwidth);
gw = max(rlength, rwidth);
nCount = area / (sw*sw);
sarea = area - nCount*sw*sw;
if(sarea >= 0 && sw > 0 && nCount >0)
{
printf(" [%d, %d]/t", sw, nCount);
}
gw--;
sw--;
Rect(sarea, gw, sw);//使用递归方式实现
return 0;
}
int main(int argc, char* argv[])
{
int count = 0;
int length = 3;
int width = 2;
Rect(length * width, length, width);
return 0;
}
本文介绍了一种算法,该算法能够确定用最少数量的正方形填充特定长方形区域的方法。通过递归方式,算法逐步分解长方形,直至完全由正方形组成,并输出每个正方形的尺寸及数量。
1万+

被折叠的 条评论
为什么被折叠?



