算法题 求解答

时间:2021-01-18 11:17:11
用半径相等的两个圆覆盖一个w*h的矩形,要求两圆不相交且必须在矩形内。求覆盖面积最大时两圆半径。

14 个解决方案

#1


我觉得应该是先靠边放一个半径min(w,h)/2的,再放一个能放得下的最大的。

证明没有。而且暂时也不会。

#2


假设w>=h, 则问题可以用一个圆覆盖w/2*h的矩形,圆在矩形中,求覆盖面积最大时圆的半径。这样问题就简单了。以下说明为什么能转换:
1 圆半径相同,且在矩形内,因此可以将矩形划分成2部分,一部分包含圆A,剩余包含圆B
2 很容易证明当矩形被均分时,圆的半径应该是最大的。

如果问题改成圆的半径可以不同,那就复杂了

#3


假设两圆的半径为a,b
要符合题目要求则一定有,圆a,b均在矩形内部且与矩形两对边分别相切,且圆a,b相切

对两圆的圆心连线,并用勾股定理
有等式
(w-a-b)*(h-a-b) = (a+b)*(a+b)
w*h = (w+h)*(a+b)
a+b = (w*h)/(w+h)
所以a^2+b^2+2ab为定值,当a*b越小,面积越大
而a和b的大小范围是在(0,min(w,h)/2]
所以当a=min(w,h)/2时,a和b面积最大

#4


引用 3 楼 ronkins 的回复:
假设两圆的半径为a,b
要符合题目要求则一定有,圆a,b均在矩形内部且与矩形两对边分别相切,且圆a,b相切

对两圆的圆心连线,并用勾股定理
有等式
(w-a-b)*(h-a-b) = (a+b)*(a+b)
w*h = (w+h)*(a+b)
a+b = (w*h)/(w+h)
所以a^2+b^2+2ab为定值,当a*b越小,面积越大
而a和b的大小范围是在(0,min(w,h……
您好 您的三个由勾股定理得出的公式 我怎么看不懂啊 能清楚一点么

#5


引用 4 楼 longburulin 的回复:
引用 3 楼 ronkins 的回复:假设两圆的半径为a,b
要符合题目要求则一定有,圆a,b均在矩形内部且与矩形两对边分别相切,且圆a,b相切

对两圆的圆心连线,并用勾股定理
有等式
(w-a-b)*(h-a-b) = (a+b)*(a+b)
w*h = (w+h)*(a+b)
a+b = (w*h)/(w+h)
所以a^2+b^2+2ab为定值,当a……


4楼的思路是对的(至少我认为),但是证明过程是错的。。。
我来沿着它的思路来证明一下
变量定义相同
如果我们将半径为a的圆A放在右下角,将半径为b的圆B放在左上角,很容易猜到这样覆盖的面积会最大(表示不会证明- -)
以圆A和圆B的圆心为斜边,平行于w,h的边为直角边,得到一个直角三角形
于是 (w-(a+b))^2 + (h-(a+b))^2 = (a+b)^2
展开之后得到 w^2-2w(a+b)+(a+b)^2 +h^2 -2h(a+b)+(a+b)^2 = (a+b)^2
w^2+h^2-2(w+h)(a+b)+(a+b)^2=0
(w+h)^2-2(w+h)(a+b)+(a+b)^2=2wh
(w+h-a-b)^2=2wh
a+b=w+h-√(2wh)(√为根号)

易知覆盖面积为π(a^2+b^2) 
π((a+b)^2-2ab)
于是,需要a*b最小即可。
设a+b=x 即(x=w+h-√(2wh))
a=(x-b)
a*b=(x-b)*b=-b^2+bx
设f(b)=-b^2+bx
易知f(b)的曲线是口向下的,于是我们的目标就是使b在合理的范围内f(b)最小
f(b)以x/2为中心轴,当b=0(或x)时,f(b)=0
假设h<=w,则可知b的合理范围为 0<=b<=h/2  且  0<=x-b(即a)<=h/2
则x-h/2<=b<=h/2
于是我们只需要判断  x-h/2和h/2相对于对称轴x/2的位置得到f(b)的最小值即可。

#6


引用 5 楼 sepcity 的回复:
引用 4 楼 longburulin 的回复:引用 3 楼 ronkins 的回复:假设两圆的半径为a,b
要符合题目要求则一定有,圆a,b均在矩形内部且与矩形两对边分别相切,且圆a,b相切

对两圆的圆心连线,并用勾股定理
有等式
(w-a-b)*(h-a-b) = (a+b)*(a+b)
w*h = (w+h)*(a+b)
a+b = (w*h)/(w+……


接着证明
显然x-h/2 和h/2关于x/2对称
假设b>=a
则显然b=h/2时  f(b)=a*b 最小
由此  1楼和3楼的结论是正确的- -||

对于本题a==b   则a=b=x/2即可。

#7


以上皆非
若h==w,r=0.5h即为所求
不妨假定h<w
若h<=0.5W,则半径r= 0.5h即为所求
以下分析0.5W<h<W时
显然r = 0.5h不是最优解

算法题 求解答

#8


剩下的就是初中几何题了 算法题 求解答
(h-2*r)^2 + (w-2*r)^2 = (2*r)^2
得 r = (h^2 + w^2)/(2*h+2*w)

#9


仔细看了下3楼的 基本求法竟然几乎一样
但是他忽略了 当0.5W<h<W时 r=0.5h时  必有一圆已经在矩形外面了
所以3楼的结论只在h<0.5w时成立 ,而这个结论又几乎是显然的

#10


最简单的方法就是 两个圆放在一组对角上,然后二分半径判相交

#11


引用 9 楼 erqieshi 的回复:
仔细看了下3楼的 基本求法竟然几乎一样
但是他忽略了 当0.5W<h<W时 r=0.5h时  必有一圆已经在矩形外面了
所以3楼的结论只在h<0.5w时成立 ,而这个结论又几乎是显然的

对,貌似勾股定理已经说明了
设圆直径d

(h-d)^2 + (w-d)^2 = d^2        (d<h,d<w)

最终结果貌似是 d = h + w - sqr(2hw) 

#12


mark一下,睡个午觉再看

#13



引用 8 楼 erqieshi 的回复:
剩下的就是初中几何题了
(h-2*r)^2 + (w-2*r)^2 = (2*r)^2
得 r = (h^2 + w^2)/(2*h+2*w)


首先这是一个数学问题,必须先会接这个题,你才有必要去考虑如何变成实现。
我认为,按照接数学题的思路,完全可以分条件。
1,矩形是正方形。答案自己想吧,肯定是能计算出来的,并且能得到计算公式。
2,长边和短边的比例1<(长边/短边)<2.这个比较难解。
3,长边和短边的比例=2,即长边是短边的2倍。口算一下就知道答案了。半径是短边的0.5.
4,长边和短边的比例>2。
口算一下也知道答案了。半径是短边的0.5.

现在只剩下第2中情况比较难解。上面8楼已经给出答案了。

#14


我的回答好像有些错了
1、h==w 的情况其实包含在 “0.5w<h<w”这个情况内,我说“若h==w,r=0.5h即为所求”这个是错的
0.5w<h<=w这种情况是#8楼分析的
2、(h-2*r)^2 + (w-2*r)^2 = (2*r)^2求r竟然也求错了,对不起韦达。。。对不起体育老师。。。
#11的才是对的 d = h + w - sqrt(2hw)  
r = (h + w - sqrt(2hw))/2

#1


我觉得应该是先靠边放一个半径min(w,h)/2的,再放一个能放得下的最大的。

证明没有。而且暂时也不会。

#2


假设w>=h, 则问题可以用一个圆覆盖w/2*h的矩形,圆在矩形中,求覆盖面积最大时圆的半径。这样问题就简单了。以下说明为什么能转换:
1 圆半径相同,且在矩形内,因此可以将矩形划分成2部分,一部分包含圆A,剩余包含圆B
2 很容易证明当矩形被均分时,圆的半径应该是最大的。

如果问题改成圆的半径可以不同,那就复杂了

#3


假设两圆的半径为a,b
要符合题目要求则一定有,圆a,b均在矩形内部且与矩形两对边分别相切,且圆a,b相切

对两圆的圆心连线,并用勾股定理
有等式
(w-a-b)*(h-a-b) = (a+b)*(a+b)
w*h = (w+h)*(a+b)
a+b = (w*h)/(w+h)
所以a^2+b^2+2ab为定值,当a*b越小,面积越大
而a和b的大小范围是在(0,min(w,h)/2]
所以当a=min(w,h)/2时,a和b面积最大

#4


引用 3 楼 ronkins 的回复:
假设两圆的半径为a,b
要符合题目要求则一定有,圆a,b均在矩形内部且与矩形两对边分别相切,且圆a,b相切

对两圆的圆心连线,并用勾股定理
有等式
(w-a-b)*(h-a-b) = (a+b)*(a+b)
w*h = (w+h)*(a+b)
a+b = (w*h)/(w+h)
所以a^2+b^2+2ab为定值,当a*b越小,面积越大
而a和b的大小范围是在(0,min(w,h……
您好 您的三个由勾股定理得出的公式 我怎么看不懂啊 能清楚一点么

#5


引用 4 楼 longburulin 的回复:
引用 3 楼 ronkins 的回复:假设两圆的半径为a,b
要符合题目要求则一定有,圆a,b均在矩形内部且与矩形两对边分别相切,且圆a,b相切

对两圆的圆心连线,并用勾股定理
有等式
(w-a-b)*(h-a-b) = (a+b)*(a+b)
w*h = (w+h)*(a+b)
a+b = (w*h)/(w+h)
所以a^2+b^2+2ab为定值,当a……


4楼的思路是对的(至少我认为),但是证明过程是错的。。。
我来沿着它的思路来证明一下
变量定义相同
如果我们将半径为a的圆A放在右下角,将半径为b的圆B放在左上角,很容易猜到这样覆盖的面积会最大(表示不会证明- -)
以圆A和圆B的圆心为斜边,平行于w,h的边为直角边,得到一个直角三角形
于是 (w-(a+b))^2 + (h-(a+b))^2 = (a+b)^2
展开之后得到 w^2-2w(a+b)+(a+b)^2 +h^2 -2h(a+b)+(a+b)^2 = (a+b)^2
w^2+h^2-2(w+h)(a+b)+(a+b)^2=0
(w+h)^2-2(w+h)(a+b)+(a+b)^2=2wh
(w+h-a-b)^2=2wh
a+b=w+h-√(2wh)(√为根号)

易知覆盖面积为π(a^2+b^2) 
π((a+b)^2-2ab)
于是,需要a*b最小即可。
设a+b=x 即(x=w+h-√(2wh))
a=(x-b)
a*b=(x-b)*b=-b^2+bx
设f(b)=-b^2+bx
易知f(b)的曲线是口向下的,于是我们的目标就是使b在合理的范围内f(b)最小
f(b)以x/2为中心轴,当b=0(或x)时,f(b)=0
假设h<=w,则可知b的合理范围为 0<=b<=h/2  且  0<=x-b(即a)<=h/2
则x-h/2<=b<=h/2
于是我们只需要判断  x-h/2和h/2相对于对称轴x/2的位置得到f(b)的最小值即可。

#6


引用 5 楼 sepcity 的回复:
引用 4 楼 longburulin 的回复:引用 3 楼 ronkins 的回复:假设两圆的半径为a,b
要符合题目要求则一定有,圆a,b均在矩形内部且与矩形两对边分别相切,且圆a,b相切

对两圆的圆心连线,并用勾股定理
有等式
(w-a-b)*(h-a-b) = (a+b)*(a+b)
w*h = (w+h)*(a+b)
a+b = (w*h)/(w+……


接着证明
显然x-h/2 和h/2关于x/2对称
假设b>=a
则显然b=h/2时  f(b)=a*b 最小
由此  1楼和3楼的结论是正确的- -||

对于本题a==b   则a=b=x/2即可。

#7


以上皆非
若h==w,r=0.5h即为所求
不妨假定h<w
若h<=0.5W,则半径r= 0.5h即为所求
以下分析0.5W<h<W时
显然r = 0.5h不是最优解

算法题 求解答

#8


剩下的就是初中几何题了 算法题 求解答
(h-2*r)^2 + (w-2*r)^2 = (2*r)^2
得 r = (h^2 + w^2)/(2*h+2*w)

#9


仔细看了下3楼的 基本求法竟然几乎一样
但是他忽略了 当0.5W<h<W时 r=0.5h时  必有一圆已经在矩形外面了
所以3楼的结论只在h<0.5w时成立 ,而这个结论又几乎是显然的

#10


最简单的方法就是 两个圆放在一组对角上,然后二分半径判相交

#11


引用 9 楼 erqieshi 的回复:
仔细看了下3楼的 基本求法竟然几乎一样
但是他忽略了 当0.5W<h<W时 r=0.5h时  必有一圆已经在矩形外面了
所以3楼的结论只在h<0.5w时成立 ,而这个结论又几乎是显然的

对,貌似勾股定理已经说明了
设圆直径d

(h-d)^2 + (w-d)^2 = d^2        (d<h,d<w)

最终结果貌似是 d = h + w - sqr(2hw) 

#12


mark一下,睡个午觉再看

#13



引用 8 楼 erqieshi 的回复:
剩下的就是初中几何题了
(h-2*r)^2 + (w-2*r)^2 = (2*r)^2
得 r = (h^2 + w^2)/(2*h+2*w)


首先这是一个数学问题,必须先会接这个题,你才有必要去考虑如何变成实现。
我认为,按照接数学题的思路,完全可以分条件。
1,矩形是正方形。答案自己想吧,肯定是能计算出来的,并且能得到计算公式。
2,长边和短边的比例1<(长边/短边)<2.这个比较难解。
3,长边和短边的比例=2,即长边是短边的2倍。口算一下就知道答案了。半径是短边的0.5.
4,长边和短边的比例>2。
口算一下也知道答案了。半径是短边的0.5.

现在只剩下第2中情况比较难解。上面8楼已经给出答案了。

#14


我的回答好像有些错了
1、h==w 的情况其实包含在 “0.5w<h<w”这个情况内,我说“若h==w,r=0.5h即为所求”这个是错的
0.5w<h<=w这种情况是#8楼分析的
2、(h-2*r)^2 + (w-2*r)^2 = (2*r)^2求r竟然也求错了,对不起韦达。。。对不起体育老师。。。
#11的才是对的 d = h + w - sqrt(2hw)  
r = (h + w - sqrt(2hw))/2