网易2017秋招--2、优雅的点

题目描述:
小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。
例如:半径的平方如果为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 }

 

posted @ 2017-05-02 14:27  qqky  阅读(140)  评论(0编辑  收藏  举报