圆圈
圆圈
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, 在圆中纵坐标的最大值的求和。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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\n", res); 16 } 17 18 return 0; 19 }