时间限制: 1000 ms 空间限制: 131072 KB 具体限制
Goto ProblemSet
题目描述
在一个二维平面上,每个整数点座标处都放了一块钱,如(1,2)、(1,1)等。现在以(0,0)为圆心画一个半径为r的圆,问圆内(包括圆圈边)上一共有多少钱。
输入
输入有多组测试数据,每组测试数据一行输入一个整数r(r<=25000)表示圆的半径,输入以0结束,最后的0不需要输出0。假设答案不超过2,000,000,000
输出
对于每个输入输出钱数。
样例输入
2
3
4
0
样例输出
13
29
49
数据范围限制
解题思路
勾股定理,是一个基本的几何定理,指直角三角形的两条直角边的平方和等于斜边的平方。中国古代称直角三角形为勾股形,并且直角边中较小者为勾,另一长直角边为股,斜边为弦,所以称这个定理为勾股定理,也有人称商高定理。
我们将半径r看成直角三角形的最长边,那实际上就是要求红色那条边的长度(取整),通过枚举另一条直角边,再根据勾股求出就行了。,下图为第一象限的情况,结果要乘4再加上原点即可。
代码
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int r,t,ans;
int main()
{
while(scanf("%d",&r))
{
if(r==0)
break;
t=r;
ans=1;
for (int i = 1; i < r; i++) {
t+=int(sqrt(r*r - i * i));
}
ans+=t*4;
printf("%d\n",ans);
}
}