对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。


题目描述:对于一个 n 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
由于刚开始学java,故用java写一下。
这个问题其实可以转换为排列问题,每两条不相交的对角线必有一个交点,并且对应四个顶点,所以转化为了求C(N,4)的问题。也就是n(n-1)(n-2)(n-3)/(432)。为了避免连乘数字太大,可以变换成n(n-1)/2(n-2)/3(n-3)/4。这样能成功的原因是n和n-1里面一定有一个2的倍数,同理n,n-1,n-2里面肯定有一个3的倍数。
如果声明结果为一个Long类型的话,有几个测试点过不了,比如输入98765,输出错误。所以需要用到BigInteger。而BigInteger不能直接与1,2,3,4做运算,所以比较麻烦。
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
BigInteger n = scan.nextBigInteger();
//double result = n(n-1)/2(n-2)/3*(n-3)/4;
BigInteger num1 = new BigInteger("1");
BigInteger num2 = new BigInteger("2");
BigInteger num3 = new BigInteger("3");
BigInteger num4 = new BigInteger("4");
BigInteger result1 = n.subtract(num1);
BigInteger result2 = n.subtract(num2);
BigInteger result3 = n.subtract(num3);
BigInteger result = n.multiply(result1).divide(num2).multiply(result2).divide(num3).multiply(result3).divide(num4);
System.out.println(result);
}
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM