判断一个圆周上,所给出的点能组成钝角三角形的个数。输入是点在圆周上的角度值。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
import java.util.Stack;
public class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double[] dot = new double[n];
for(int i = 0;i < n;i++)
dot[i] = in.nextInt();
int count = 0;
for(int i = 0;i<n-2;i++){
for(int j = i+1;j<n-1;j++){
for(int k = j+1;j<n;j++)
if(isDun(dot[i],dot[j],dot[k]))
count++;
}
}
System.out.println(count);
}
private static boolean isDun(double a,double b,double c) { //判断是不是钝角三角形
double[] aa=new double[2];
double[] bb=new double[2];
double[] cc=new double[2];
aa[0]=Math.cos(a*Math.PI/180); //这里千万要注意是弧度值,半天不通过是这个原因
aa[1]=Math.sin(a*Math.PI/180);
bb[0]=Math.cos(b*Math.PI/180);
bb[1]=Math.sin(b*Math.PI/180);
cc[0]=Math.cos(c*Math.PI/180);
cc[1]=Math.sin(c*Math.PI/180);
double ab=len2(aa,bb);
double bc=len2(cc,bb);
double ac=len2(aa,cc);
ArrayList<Double> list = new ArrayList<Double>();
list.add(ab);
list.add(bc);
list.add(ac);
Collections.sort(list); //为了快速排个序,还整了个ArrayList出来用sort();
if(list.get(0)+list.get(1)<list.get(2)) //核心判断条件,两个较小边的平方和小于最大变的平方和
return true;
else return false;
}
private static double len2(double[] aa, double[] bb) { //求平方和
// TODO Auto-generated method stub
double x = Math.pow((aa[0]-bb[0]),2);
double y = Math.pow(aa[1]-bb[1], 2);
return x+y;
}
}