题目描述:
小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。
例如:半径的平方如果为25
优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。
输入描述:
输入为一个整数,即为圆半径的平方,范围在32位int范围内。
输出描述:
输出为一个整数,即为优雅的点的个数
输入例子:
25
输出例子:
12
思路:此题关键i*i+j*j==给定n,如果i和j都为整数即为优雅点
1 #include <iostream> 2 #include <math.h> 3 using namespace std; 4 int main() 5 { 6 int circle; 7 int ans = 0; 8 while(cin>>circle) 9 { 10 int r = sqrt(circle);//求半径 11 for(int i =1;i<=r;i++)//i和j都从1开始,特殊情况(0,r)即为优雅点特殊处理 12 { 13 double j = sqrt((double)circle-i*i);//i*i+j*j==circle 14 if(j>0 && j == (int)j)//当j为整数即为优雅点 15 { 16 ans++; 17 } 18 } 19 ans = ans * 4;//每个在第一象限的点在其他三个象限也有对应点 20 if(r*r == circle)//处理(0,r)为优雅点的特殊情况 21 { 22 ans = ans + 4; 23 } 24 cout<<ans<<endl; 25 } 26 return 0; 27 }