目录
题目:
题目描述:
题目链接:
思路:
思路详解:
可以通过画图或微积分的思想理解为什么水平向右走r的距离再直接走圆弧是最短的
假设把水平向右的路程分为无数段,每往右走一小段的同时按照当前半径的圆走一小段圆弧
即水平还是向右走r的距离,但是有无数段半径不等的小圆弧连接直到到达坐标
所以水平向右走r的距离再直接走圆弧相当于把这无数段连接的小圆弧变成圆滑的曲线
知道了最短路径,用勾股定理求r,用反三角函数求弧度(显然这题给的数据并不是特殊角),再用弧长公式求出l,最后结果就是r+l
在考场上可以用系统自带的计算机算,也可以通过代码,敲代码时注意一下整型变量、浮点型变量计算时的精度问题
题目要求输出答案四舍五入到整数的结果,我看网上有些题解对于这个点有争议,但是我之前也刷过类似要求的题,一般来说就是只需要看小数点后一位
圆及三角函数相关前置知识:
角度和弧度的转换:
不记得公式就记住360°=2π推一下就行
弧度转角度:角度=弧度×180°/π
角度转弧度:弧度=角度×π/180°
弧长公式:
已知圆心角弧度和半径:若弧所对的圆心角为θ(弧度制),圆的半径为r,则弧长l=θ×r
已知圆心角角度和半径:当圆心角为n°,半径为r时,弧长l=n°πr/180°
已知扇形面积和半径:若扇形面积为S,半径为r,根据S=(l×r)/2,可得弧长l=2S/r
C++中的三角函数:
在C++中,三角函数是数学库<cmath>的一部分,以下是一些常见的三角函数
sin:计算正弦值。函数原型double sin(double x); 参数x为弧度
cos:计算余弦值。函数原型double cos(double x); 参数x为弧度
tan:计算正切值。函数原型double tan(double x); 参数x为弧度
如果要计算角度的三角函数值,需要先将角度转换为弧度
C++还提供了asin,acos,atan等反三角函数,用于计算给定三角函数值对应的角度(以弧度为单位)
代码:
代码详解:
#include<bits/stdc++.h> //填空题,答案是1576
using namespace std;
int main()
{
double r=sqrt(233*233+666*666); //勾股定理求半径r
double theta=atan(666.0/233.0); //用atan函数求弧度,注意666/233是两个整型变量的计算,如果整除
//会有精度问题,输出ans=1486.76,改为666.0/233.0就可以了
double l=theta*r; //弧长公式
double ans=r+l;
cout<<ans<<endl; //ans=1576.45
return 0;
}