圆圈

圆圈

 

Problem Description

在一个二维平面上,每个整数点坐标处都放了一块钱,如(1,2)、(1,1)等。现在以(0,0)为圆心画一个半径为r的圆,问圆内(包括圆圈边)上一共有多少钱。

Input

输入有多组测试数据,每组测试数据一行输入一个整数r(r<=25000)表示圆的半径,输入以0结束,最后的0不需要输出0。假设答案不超过2,000,000,000

Output

对于每个输入输出钱数。

Sample Input

2
3
4
0

Sample Output

13
29
49

解释:

这算是一个数学题吧,

4: 49 = 48 + 1 = 4 * 12 + 1 = 4 * (4 + 8) + 1 ;

3:29 = 28 + 1 = 4 * 7 + 1 = 4 * (3 + 4) + 1;

所以只要确定,一个数字,就可以确定最后答案了,例如4中的那个8,3中的那个4. 

4: 8 = 3 + 3 + 2

3:4 = 2 + 2

其实就是 横坐标为1的时候,一直到n-1, 在圆中纵坐标的最大值的求和。

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int main () {
 6   int r;
 7   while (~scanf("%d", &r) && r) {
 8     int res = 1;
 9     int ans = r;
10     int s_r = r * r;
11     for (int i = 1; i < r; i++) {
12       ans += int(sqrt(s_r - i * i));
13     }
14     res += ans * 4;
15     printf("%d
", res);
16   }
17   
18   return 0;
19 }
View Code
原文地址:https://www.cnblogs.com/gznb/p/11211914.html