输入为一个整数,即为圆半径的平方,范围在32位int范围内。
输出为一个整数,即为优雅的点的个数
25
12
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int r2=sc.nextInt();
        Set<Integer> set=new HashSet<>();
        int count=0;
        for(int i=0;i*i<=r2;i++){
            if(set.contains(r2-i*i)){
                if(i*i==0||r2-i*i==0)count+=4;
                if(i!=0&&r2-i*i!=0)count+=8;
            }
            if(r2==2*i*i)count+=4;
            set.add(i*i);    
        }
        System.out.println(count);
    }
}
 #include<iostream>
#include<cmath>
using namespace std;
int main() {
    int n;
    cin>>n;
    int count = 0;
    int r = (int)sqrt(n);
    if (r*r == n) {
        count += 4;
        --r;
    }
    for (int i = r; i > 0; i--) {
        int x = (int)sqrt(n - i*i);
        if(x*x + i*i == n) count += 4;
    }
    cout<<count<<endl;
}
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        System.out.println(count(n));
    }
    
    public static int count(int n) {
        int count = 0;
        double r = Math.sqrt(n);
        for (int i = 0; i < r; i++) {
            double j = Math.sqrt(n - i * i);
            if (Math.abs(j - Math.round(j)) <= 0.000000001) {
                count++;
            }
        }
        return 4 * count; 
    } 
}
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int rSquare = in.nextInt();
        int count =0;
        double r = Math.sqrt(rSquare);
        //存储值
        for(int i=0;i<r;i++){
            /*运行超时
            for(int j=1;j<r+1;j++){
                if(i*i+j*j==rSquare){
                    count++;
                }
            }
            */
//优化点1
            double j = Math.sqrt(rSquare-i*i);
            if((int) j==j){
                count++;
            }
        }
        
        //优化点2
        System.out.print(count<<2);
        
    }
}
//选第一象限,判断i是整数的时候,j是不是整数就行了 //此处把double强制转换为int,如果有小数点,那么转换后就是变小了 //需要注意的是,double仅能在一定范围内(正负2^53)精确的表示整数 //如果超过这个范围,就不是精确的,此时用 == 比较是不正确的 //本题输入是int,所以可以这么做
#include <iostream>
#include <math.h>
using namespace std;
int main(){
    int n = 0;
    while(cin >> n){
        int res = 0;
        for( int i = 0; i < sqrt(n); i++ ){
            double j = sqrt(n - i*i);
            if( (int)j >= j )
                res++;
        }
        cout<<4*res<<endl;
    }
}
from math import sqrt def nCouple(N): r=int(sqrt(N)) count=0 for i in range(r+1): j=sqrt(N-i**2) if j in range(r+1) : if i==0 or j==0: count+=2 else: count+=4 return count if __name__=='__main__': n=int(input()) print(nCouple(n))
from math import sqrt
def countGracePoint(number):
    squareSet = set()
    for i in range(int(sqrt(number)) + 1):
        squareSet.add(i ** 2)
    res = 0
    for i in range(int(sqrt(number)) + 1):
        if number - i ** 2 in squareSet:
            if i != 0 and number - i ** 2 != 0:
                res += 4
            else:
                res += 2
    return res
a = int(input())
print(countGracePoint(a))
importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain {publicstaticvoidmain(String[] args) throwsNumberFormatException, IOException {// TODO Auto-generated method stubBufferedReader read = newBufferedReader(newInputStreamReader(System.in));doubler2 = Integer.parseInt(read.readLine());doubler = Math.sqrt(r2);f(r2);}publicstaticvoidf(doubler2) {intcount = 0;for(intx = 0; x < Math.sqrt(r2); x++) {doubley = Math.sqrt(r2 - x * x);if((int) y == y) {count += 4;}}System.out.print(count);}}
// 判断是否为整数,使用double类型保证精度bool isInt(double y){
double a = y - (int)y;
if(a==0)
return 1;
else
return 0;
}
void elegantPoint()
{
int rSquare;
cin >> rSquare;
int result = 0;
double r = sqrt(rSquare);// 求第一象限满足要求的点,乘以4得到所有象限满足要求的点的个数for(int x=1; x*x<rSquare; x++)
{
double y = sqrt(rSquare-x*x);
if(isInt(y))
{
result+=4;
}
}// 判断X轴和y轴上的点是否满足整数条件,若满足则加上4个点if(isInt(r))
{
result+=4;
}
cout << result;
}
bool isInt(double x) {double a = x - (int) x;
if(a==0) return 1;
else return 0;
}
int main(){
int radius;
int cnt = 0;;
while(cin >> radius){
for(int i=1; i<= sqrt(radius); i++){
if (isInt(sqrt(radius - i*i)))
cnt++;
}
cout << 4*cnt << endl;
}
return 0;}一开始用float类型通不过,换成double就可以了。原来题目上写了32位精度,不够细心。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.HashSet;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int r2 = Integer.parseInt(br.readLine());
        double r = Math.sqrt(r2);     // 半径
        HashSet<Integer> set = new HashSet<>();
        int count = ((int)r)*((int)r) == r2? 4: 0;
        for(int x = 0; x <= (int)r; x++) set.add(x*x);      // 先将0~r中整数的平方存储起来便于之后查找
        for(int x = 1; x < r; x++)
            if(set.contains(r2 - x*x)) count += 4;      // 满足勾股数,计数自增4
        System.out.println(count);
    }
} import java.util.Scanner;
public class Main11 {
    public static void main(String[] args) {
        Scanner sr =new Scanner(System.in);
        while (sr.hasNext()){
            int res=0;
            int c=sr.nextInt();
            int cc=(int)Math.sqrt(c);
            for (int i=cc;i>0;i--){
                if(Math.pow(c-Math.pow(i,2),0.5)%1==0){//a²=c²-b²,对a²开根,为整数时res++
                    res++;
                }
            }
            System.out.println(res*4);
        }
    }
}