首页 > 试题广场 >

优雅的点

[编程题]优雅的点
  • 热度指数:36402 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。
例如:半径的平方如果为25
优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12个点。

输入描述:
输入为一个整数,即为圆半径的平方,范围在32位int范围内。


输出描述:
输出为一个整数,即为优雅的点的个数
示例1

输入

25

输出

12
import java.util.*;
//把平面图形用公式转成一维思想
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int r2 = sc.nextInt();
        double r = Math.sqrt(r2);
        int res = 0;
        for(int i = 0; i < r; i++){
            double t = Math.sqrt(r2-i*i);
            if((int)t == t)
                res++;
        }
        System.out.println(res*4);
        sc.close();
    }
}

发表于 2019-08-11 10:34:25 回复(0)

import java.util.Scanner;

public class Main {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int flag=0;
double b=Math.sqrt(n);
for (int i=0;i<b;i++){
double j= Math.sqrt(n-ii);
if ((int)j==j)
flag++;
}
System.out.println(flag
4);
}
}

编辑于 2019-04-15 18:41:54 回复(0)
很数学啊,把圆分成四份,每一部分都包含一个半轴,最后结果乘以4,bingo。
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        double r = Math.sqrt(n);
        int max_len = (int) r;

        int result = 0;

        for (int i = 1; i <= max_len; i++){
            int tmp_y = (int)Math.sqrt(n - i * i);
            if ((tmp_y * tmp_y + i * i) == n){
                result++;
            }
        }
        System.out.println(4 * result);
    }
}

发表于 2018-08-16 21:30:12 回复(0)

import java.util.*;
public class Main{

public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    double r=Math.sqrt(n);
    int count=0;
    for(int i=-(int)r;i<=(int)r;i++) {
        for(int j=-(int)r;j<=(int)r;j++) {
            if(i*i+j*j==n) {
                count++;
            }else {
                continue;
            }
        }
    }
    System.out.print(count);
}

}
AC百分之八十,算法复杂度太高

发表于 2018-06-28 09:19:25 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(elegant(n));
    }
    public static int elegant(int n) {
        int cnt = 0;
        int r = (int) Math.pow(n, 0.5);
        for (int i = 1;i <= r;i ++) {
            int m = n - i * i;
            if (Math.pow(m, 0.5) == Math.ceil(Math.pow(m, 0.5))) {
                cnt ++;
            }
        }
        return cnt * 4;
    }
}

发表于 2018-05-24 19:56:41 回复(0)
import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            int radius = in.nextInt();
            System.out.println(solution_2(radius));
        }
    }

    private static int solution(int radius) {
        
        int max = (int)Math.sqrt(radius);
        HashSet<Integer> hs = new HashSet<Integer>();
        int loop = max;
        //将0至max的平方加入hs。
        while(loop>=0){
            hs.add(loop*loop);
            loop--;
        }
        int result = 0;
        //问题:0,5 这种情况,只用乘2,而请他情况要乘4,怎么解决?
        //从1开始检测,不从0,因为如果检测到(max,0)是符合的,那么直接乘4,就包含了(0,max)的情况。
        //即只需判断(0,max)这一对是否满足,然后乘4即可,不用判断(max,0)。
        //而像(3,4)和(4,3)这种,就必须都算上然后乘4。
        for(int i=1; i<=max; i++){
            
            int tmp = radius - i*i;
            if(hs.contains(tmp)){
                result++;
            }
        }
        return result*4;
    }
}

编辑于 2018-03-27 15:22:07 回复(0)
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int num = Integer.parseInt(br.readLine());
        int sqnum = (int) Math.sqrt(num);
        int count = 0;
        if (sqnum * sqnum == num){
            count = 4;
        }
        for (int i = 1; i <= sqnum; i++) {
            for (int j = 1;  j <= sqnum; j++) {
                if (i * i + j * j == num) {
                    count += 4;
                    break;
                }
            }
        }
        System.out.println(count);

    }
}
发表于 2018-03-15 09:50:20 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        double a = Math.sqrt(n);
        int count=0;
        for (int i =0; i <= a; i++) {//横坐标
            int j = (int)Math.sqrt(n-i*i);//纵坐标
                if (i*i+j*j==n){
                    count++;
                }
            
        }
        if (Math.sqrt(n) == (int)Math.sqrt(n)) {
            System.out.println(count * 4 - 4);
        } else {
            System.out.println(count*4);
        }
    }
}
发表于 2018-03-13 22:11:11 回复(0)
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);
    }
}

发表于 2018-02-18 21:26:27 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int num = in.nextInt();
            int countTotal = 0;
            int countFlag = 0;
            int start = (int)Math.ceil(Math.sqrt(num/2)); //向上取整
            int end = (int)Math.floor(Math.sqrt(num));
            for (int i = start; i <= end; i++) {
                double temp = Math.sqrt(num - i*i);
                double ceilTemp = Math.ceil(temp);
                double floorTemp = Math.floor(temp);
                if (ceilTemp - floorTemp <= 0.000000001) countTotal++;
                if (i*i*2 == num) countFlag++;
            }
            if (Math.ceil(Math.sqrt(num)) == Math.floor(Math.sqrt(num))) countFlag++;
            System.out.println((countTotal-countFlag)*8 + countFlag*4);
        }
    }
}

发表于 2018-01-09 09:30:32 回复(0)

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException
    {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String str = br.readLine();
    int sqrtNum = Integer.parseInt(str);
    int count =0;
    int a =(int) Math.sqrt(sqrtNum);
    if(a*a ==sqrtNum)
    {
    count = count+4;
    }
        for(int i =1;i<=a;i++)
        {
            for(int j=i;j <=a;j++ )
            {
                if(i*i+j*j == sqrtNum)
                {
                    count= count+8;
                    if(i==j)
                    {
                        count = count -4;
                    }
                }
            }
        }
    System.out.println(count);
    }
}
发表于 2017-11-07 19:23:33 回复(0)
import java.util.*;

public class Main{
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNextInt()) {
            int i = in.nextInt();
            int j = (int)Math.sqrt(i);
            double jj = Math.sqrt(i/2);
            int total=0;
            for(int k=j;k>=jj;k--) {
                for(int inner=0;inner<=jj;inner++) {
                    if((inner*inner+k*k)==i)
                            
                        
                        {        if(inner==0||k==0||(inner==k))
                        {total+=4;
                         break;}
                                 else 
                                   { total+=8;
                                    break;
                                     }
                                   //total+=4;
                           }

                }
            }
            System.out.println(total);
        }
    }
}
发表于 2017-10-20 18:33:23 回复(0)
题意简化为:找出一个坐标满足两个条件:1.横纵坐标都为整数;2.坐标在圆心为圆点,n为半径的圆上;
注意:考虑输入的半径n平方开不尽的情况(其实自动转型就好了,不管是否开的尽,都是取Math.floor)
判断的情况:直接判断Math.floor(I)是否等于Math.ceil(i)就可以知道每个整数横坐标对应的纵坐标是否为整数了,这里还需要注意一点:当纵坐标不为0时,结果要加2,而不是加1,因为有正负
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main{

	//优雅的点  83 9000多呢
	public static int n = 0;
	public static void main(String[] args) throws IOException{
		
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		n = Integer.valueOf(bf.readLine());
		int max = (int) Math.sqrt(n);
		int sum = 0;
		for(int i=-max; i<=max; i++){
			sum += add(i);
		}
		System.out.println(sum);
		bf.close();	
	}
	public static int add(int i){
		double p = Math.sqrt(n-i*i);
		double q = Math.ceil(p);
		if((int)p != (int)q)
				return 0;
		if(n == i*i)
			return 1;
		return 2;
	}
}
发表于 2017-09-08 13:03:10 回复(0)
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner scanner=new Scanner(System.in);
int l=scanner.nextInt();
int r=(int)Math.sqrt(l);
int sum=0;
for(int i=0;i<=r;i++){
double j=Math.sqrt(l-i*i);
if(j-Math.round(j)==0){
sum+=(i==0||j==0)?2:4;
}
}System.out.print(sum);
}
}
编辑于 2017-09-07 16:38:01 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int res =0;
int n = sc.nextInt();
int p = (int) Math.pow(n, 0.5);
if(n%(p*p)==0) res+=4;
for(int i=2;i<Math.pow(n, 0.5);i++){
for(int j=i;j<Math.pow(n, 0.5);j++){
if(i*i+j*j == n && i!=j){
res+=8;
}else if(i*i+j*j == n && i==j){
res += 4;
}
}
}
System.out.println(res);
}
}
发表于 2017-09-07 09:48:48 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        System.out.println(caculate(n));
    }
    public static int caculate(int n){
        int count = 0;
        int m = (int)Math.sqrt(n);
        for(int i=0;i<=m;i++){
            for(int j=m;j>0;j--){
                if(i*i+j*j == n){
                    count++;
                }
                if(i+j<m){
                    break;
                }
            }
        }
        count =count*4;
        return count;
    }
}
发表于 2017-09-01 21:34:30 回复(0)

import java.util.Scanner;

public class Main {
 public static void main(String[] args){
  Scanner sc = new Scanner(System.in);
  System.out.println(method(sc.nextLong()));
 }
 
 public static int method(long r){
  int count = 0;
  int limit = (int)Math.sqrt(r / 2);
  for(int i = 1; i < limit + 1; i++){
   long res = r - i * i;
   double tmp = Math.sqrt(res);
   if(tmp - (int)tmp == 0){
    if(i - (int)tmp == 0){
     count += 4;
    }
    else{
     count += 8;
    }
   }
  }
  double r1 = Math.sqrt(r);
  if(r1 - (int)r1 == 0){
   return count + 4;
  }
  else{
   return count;
  }
 }
}

发表于 2017-08-25 15:32:47 回复(0)