對於一個 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