考虑到纸张的长度和宽度,我们必须将纸张分成相同尺寸的正方形。如果我们将纸张切割成这个最大长度的正方形,我们想要找到纸张切割的方格数。
我有以下代码。这段代码是否正确?
main()
{
int t,l,b,i,j,area;
scanf("%d",&t);
int a[t];
for(i=0;i<t;i++)
{
a[i]=0;
scanf("%d%d",&l,&b);
area=l*b;
for(j=1;j*j<=area;j++)
{
if(area%(j*j) ==0)
a[i]=area/(j*j);
}
}
for(i=0;i<t;i++)
printf("%d\n",a[i]);
}
答案 0 :(得分:9)
作为提示,如果长度和宽度是整数,那么你可以使用的最大方形尺寸将由长度和宽度的greatest common divisor给出,因为方形尺寸必须除以长度和宽度。尝试使用Euclid's algorithm来计算他们的GCD;它非常容易编码并且效率极高。
然后,您可以通过计算确定平方数
length * breadth / gcd(length, breadth)^2
分子是纸张的总面积,分母是一个正方形的总面积。
希望这有帮助!