找優雅點(原點在圓心的圓上的整數點)
阿新 • • 發佈:2019-01-24
有一個圓心在座標原點的圓,知道圓的半徑的平方,認為在圓上的點而且橫縱座標都是整數的點是優雅的,現在想尋找一個演算法計算出優雅的點的個數。
package Day31; //圓的方程:x^2+y^2=r^2 //由於預設y=sqrt(r^2-x^2)是double型別 //在判斷y是不是整數 import java.util.*; public class Test { /** * @param args */ static int count=0; public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc =new Scanner(System.in); int s = sc.nextInt(); for(int x=(int)(-Math.sqrt(s));x<=Math.sqrt(s);x++) { for(int y=(int)(-Math.sqrt(s));y<=Math.sqrt(s);y++) { if(x*x+y*y==s) { count++; // System.out.println(x+","+y); } } } System.out.println(count); } } //上述方法複雜度很高,下面是牛人的方法 package Day31; import java.util.*; //很聰明的解題思路,由於圓上除了原點特殊,其他都是關於x,y軸對稱,只要求得所有滿足條件的正的x,y然後乘以4即可,考慮原點的特殊性,而且一定有原點這點 //對於x,y的取值只取一頭就可以了 public class Test1{ /** * @param args */ static int count=0; public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc =new Scanner(System.in); int s = sc.nextInt(); for(int x=0;x<Math.sqrt(s);x++)//只考慮x=0,就行了。對於x,y的取值只取一頭就可以了 { double y=Math.sqrt(s-x*x); if((int)y==y) { count++; // System.out.println(x+","+y); } } // System.out.println(count); System.out.println(count<<2);//左移2相當於乘以4 } } //自己再次修改 package Day31; import java.util.*; //優化 //解題思路:由於圓上的點都是成對對稱的,除了在原點這一例外。 public class Test2{ /** * @param args */ static int count=0; public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc =new Scanner(System.in); int s = sc.nextInt(); for(int x=(int) -Math.sqrt(s);x<=(int)Math.sqrt(s);x++) { double y=Math.sqrt(s-x*x); if((int)y==y) { count++; if(x==0) { count=count-1; } System.out.println(x+","+y); } } System.out.println(count*2); //System.out.println(count<<2); } }
有一個圓心在座標原點的圓,知道圓的半徑的平方,認為在圓上的點而且橫縱座標都是整數的點是優雅的,現在想尋找一個演算法計算出優雅的點的個數。