题目大意:

思路:
将半径r转一圈,就得到了
∵∠ABC=90°
∵
∠
A
B
C
=
90
°
∴△ABC
∴△
A
B
C
为直角三角形
∴AB=(2r)2−a2−−−−−−−−√
∴
A
B
=
(
2
r
)
2
−
a
2
∴S△ABC=AB
∴
S
△
A
B
C
=
A
B
×
×
CB=(2r)2−a2−−−−−−−−√
C
B
=
(
2
r
)
2
−
a
2
×
×
a
a
S□ABCD=2
S
□
A
B
C
D
=
2
×
×
S△ABC=2
S
△
A
B
C
=
2
×
×
(2r)2−a2−−−−−−−−√
(
2
r
)
2
−
a
2
×
×
a
a
同理可得
×
×
(2r)2−b2−−−−−−−−√
(
2
r
)
2
−
b
2
×
×
b
b
阴影面积
=S□ABCD+S□EFGH−a
=
S
□
A
B
C
D
+
S
□
E
F
G
H
−
a
×
×
b=2
b
=
2
×
×
(2r)2−a2−−−−−−−−√
(
2
r
)
2
−
a
2
×
×
a+2
a
+
2
×
×
(2r)2−b2−−−−−−−−√
(
2
r
)
2
−
b
2
×
×
b−a
b
−
a
×
×
b
b
我知道你们看不懂
那么由于r的值是确定的,而a,b又必须是正整数,那么我们枚举a和b,就可以求出最终答案啦!
感谢 XXY 同学帮助修改markdown!
代码:
#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;
double maxn,r,d;
int s1,s2;
int main()
{
cin>>r;
for (double i=1;i<2.0*r;i++)
{
double a=(double)sqrt(2.0*r*2.0*r-i*i); //求AB长度
for (double j=1;j<2.0*r;j++)
{
double b=(double)sqrt(2.0*r*2.0*r-j*j); //求EF长度
if (a*i+b*j-i*j>maxn) //求最大值
{
maxn=a*i+b*j-i*j;
s1=(int)i;
s2=(int)j; //记录答案
}
}
}
cout<<s1<<endl<<s2;
return 0;
}
本文介绍了一个涉及几何图形的数学问题的解决方法。通过计算不同条件下的面积,利用枚举法找到最优解。代码实现了该算法,并输出了所需的结果。
210

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



