(纪中)1192. 圆圈 (Standard IO)【数学】

时间限制: 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看成直角三角形的最长边c(c,那实际上就是要求红色那条边的长度(取整),通过枚举另一条直角边1 r1(1~r-1),再根据勾股求出就行了。(c2=a2+b2)(c2=a2+b2),下图为第一象限的情况,结果要乘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);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章