C语言已知内切圆半径求直角三角形的三条边长

#include
#include
voidsolve(intr)
{
for(inta=2*r;a<80;a++)
{
for(intb=a;b<900;b++)
{
intc=a*a+b*b;
if(fabs(sqrt(c)-(int)sqrt(c))<1e-8)
{
if(r==(a+b-sqrt(c))/2)
{
printf("%d,%d,%d\n",a,b,(int)sqrt(c));
}
}
}
}
printf("\n");
}
三条直角边要求是整数。我这样写可以得到答案,可是循环次数太多了,请问要怎么写可以循环次数不那么多
慕尼黑的夜晚无繁华
浏览 369回答 2
2回答

温温酱

这道题的答案应该是这样,我给你说一下思路首先这个问题只需要一次循环就能得出答案因为已知内切圆半径和三角形是直角这两个信息,这时候设其中一条直角边长度为X另一条直角边的长度是不是就已经确定了?然后就是思考,这个循环的范围,因为内切圆的长度是2r,所以X至少是2r+1循环到什么时候结束呢当X慢慢变长三角形会慢慢接近等腰之间三角形此时边长为D,只需循环XD存在一个整数X1,使得另一个直角边也是整数为X2,那X2必然小于D,因为在三角形为等腰直角三角形的时候,另一条直角边为D,X再增加另一条边会慢慢变短所以这个X1,X2这个解会在X=X2的时候就被找到思路有了后代码其实很简单,主要工作量都在根据X算出另一条边上,这个在纸上列个方程,写进去就行我写个伪代码,半径为r内切圆的等腰直角三角形的边为2r+√2rfor(intx=2*r+1;x
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript