首先- 半径为 5 的圆适合 60 个 1x1 正方形,而不是 52。我敢打赌,有人没有计算点 {[3,4],[3,-4],[4,3],[4 ,-3],[-4,3],[-4,-3],[-3,4],[-3,-4]} 在纸上画并用手数时,不确定它们是否就在圈子上或就在圈子外面。他们正好在圈子上。
第二——MBo 的回答把我带到了这里——我有时会在 StackOverflow 上搜索 Gauss Circle Problem,看看是否有人提出了一些新的、有趣的算法。
第三- 这是代码:
int allSquares=0,
squaredRadius=radius*radius,
sideOfQuarterOfInscribedSquare=(int)(long)(radius/sqrt(2));
for(int x=sideOfQuarterOfInscribedSquare+1;
x<radius;
x++){
allSquares+=(long)sqrt(squaredRadius-x*x);
}
allSquares= allSquares*8+4*sideOfQuarterOfInscribedSquare*sideOfQuarterOfInscribedSquare;
return allSquares;
它所做的只是计算圆圈八分之一内的正方形,在内接正方形之外。抱歉我的时髦格式和过于冗长的变量名。