C/C++ 凸多邊形求對角線交點的示例程式碼
阿新 • • 發佈:2020-11-09
題目描述
對於一個 n 個頂點的凸多邊形,它的任何三條對角線都不會交於一點。請求出圖形中對角線交點的個數。
例如,6 邊形:
這裡可以注意到並沒有出現多條對角線交叉在一個點的情況。
輸入格式
輸入只有一行一個整數 n,代表邊數。
輸出格式
輸出一行一個整數代表答案。
資料規模與約定
這裡給出一個特別的例子
輸入是:
98765
輸出是:
3964374251598225115
特別注意,在這種情況下,答案的值已經非常逼近longlong型別的最大表示範圍,所以在計算的過程當中要特別注意,下面給出程式碼
#include <iostream> using namespace std; int main() { long long int n = 0; cin >> n; long long int answer = 0; long long int temp = 1; while (temp < (n - 2)) { answer += temp * (n - temp - 2); temp++; } if (n % 4 == 0) { n /= 4; } else if (n % 2 == 0) { n /= 2; answer /= 2; } else { answer /= 4; } answer *= n; cout << answer << endl; return 0; }
先選擇一條對角線,將多邊形分為兩個部分,一邊是一個點的,另一邊是剩下的點,兩邊的點相連形成的對角線與所選擇的對角線相交形成交點。
以此類推,現分為一邊是1個點的,然後這一邊的點逐漸增加,直到另外一邊也只剩下一個點為止。需要特別注意的是,這樣的每一組對角線都有n條,這樣重複計算了比如點a到點b和點b到點a,其實是同一條。再根據題意,每個交點是由兩個對角線形成的,而我們在計算點的時候用每條對角線都計算了一次,所以又重複計算了一遍。也就是說,這樣我們得到的answer是最終正確answer的四倍。
特別注意,我將乘n的操作挪到了外面,把除以4的操作提前了,避免在運算的過程中出現數據上溢的情況。
到此這篇關於C/C++ 凸多邊形求對角線交點的文章就介紹到這了,更多相關C++ 凸多邊形求對角線交點內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!