题目
牛牛有一个边长为 1 的正六边形,只要牛牛一推它就可以一直滚下去,正六边形左下角为 A。
如图是正六边形翻滚一次的情况。给定正六边形翻滚次数 k,求 A 点翻滚轨迹长度。
解题思路
第 1 次翻滚的轨迹长度为 ,其中
。
第 2 次翻滚的轨迹长度为 ,其中
。
第 3 次翻滚的轨迹长度为 ,其中
。
第 4 次翻滚的轨迹长度为 ,其中
。
第 5 次翻滚的轨迹长度为 ,其中
。
第 6 次翻滚的轨迹长度为 0,因为此时的滚动是以 A 点为圆心的。翻滚完成后,A 点位于六边形左下角。
先计算六边形翻滚的完整的周期(即点 A 从六边形左下角翻滚至六边形左下角)次数 n。
再计算剩余的翻滚次数的轨迹长度。
C++代码
class Solution {
public:
/**
*
* @param k int整型 翻滚次数
* @return double浮点型
*/
double circumference(int k) {
// write code here
double pi = acos(-1);
int n = k / 6;
k %= 6;
double r2 = sqrt(3.0);
double ans = pi*(4+2*r2)/3*n;
if(k==1)
ans += pi/3;
else if(k==2)
ans += pi*(1+r2)/3;
else if(k==3)
ans += pi*(3+r2)/3;
else if(k==4)
ans += pi*(3+2*r2)/3;
else if(k==5)
ans += pi*(4+2*r2)/3;
return ans;
}
}; 
京公网安备 11010502036488号