時間限制: 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);
}
}