1192. 圆圈

1192. 圆圈

题目描述
在一个二维平面上,每个整数点坐标处都放了一块钱,如(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),那实际上就是要求红色那条边的长度(取整),通过枚举另一条直角边(1~r-1),再根据勾股求出就行了。(c2=a2+b2),下图为第一象限的情况,结果要乘4再加上原点即可。

在这里插入图片描述

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
long long r; 
int main()
{
	//fre();
	scanf("%lld",&r);
	while(r)
	{
		long long t=r*r,ans=r;
		for(long long i=1;i<r;i++) ans+=sqrt(t-i*i);
		printf("%lld\n",ans*4+1);
		scanf("%lld",&r);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/bigwinner888/article/details/106732007
今日推荐