為了更好地解決這個問題,我們來看幾個例子。
首先我們定義n!=1*2*3*……*n。
再定義c(m,n)為從m個元素中無序取出n個的方法,p(m,n)為從m個元素中有序取出n個的方法。
這樣的定義是什麼意思呢?比如說從1,2,3,4共4個元素中中取出3個,有(1,2,3);(1,3,4);(2,3,4);(1,2,4)這樣共4種,而這裡是不考慮順序的,所以c(4,3)=4,而如果對每一種方案考慮它的排列順序的話,那結果將會不同,因為(1,2,3);(1,3,2);(2,1,3);(2,3,1);(3,1,2);(3,2,1)將被視為不同的方案,所以p(4,3)=6*4=24.
下面給出它們的計算公式:
p(m,n)=m!/(m-n)! c(m,n)=m!/((m-n)!*n!)
再來解決這個問題,你會覺得更輕鬆!
圓周上有n(n<=100)個點,用線段將它們彼此相連。這些線段中任意三條在圓內都沒有公共交點,問這些線段能構成多少個頂點在圓內的三角形?
輸入:一行,為數值n。
輸出:一行,為所求的答案。
樣例輸入:6
樣例輸出:1
注意:只要你資料處理得當,結果與中間數值的範圍一定在longint以內,請不要使用int64,因為這可能會引起系統誤判!
看了很長時間也沒看出樣例是怎麼湊出來的。。。
先畫個圓,在圓裡畫乙個三角形,然後延長三條邊,和圓有6個交點。
所以,我們可以推出有7個點的情況,從7個點中任意找出6個點,就是乙個三角形。(組合)
繼續往後推,就可以推出公式cn
6(符號不會打)。
我們知道
於是我們把這個公式n!/6!(n-6)!變形成1/6!*n!/(n-6)! 而n!/(n-6)!=(n-5)*(n-4)*(n-3)*(n-2)*(n-1)*n
(n-5)*(n-4)*(n-3)*(n-2)*(n-1)*n/1/2/3/4/5/6 就是最終的公式
所以看出。。。題目裡的提示是有用的。。。
#includeusing維基百科 組合數學namespace
std;
long
long
n;int
main()
圓與三角形(圓與三角形是否相交)
給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後每4行用來描述一組測試資料。4 1 三個數,前兩個數為圓心的座標xc,yc,第3個數為圓的半徑r。3000 xc,yc ...
圓與三角形
1298 圓與三角形 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後每4行用來描述一組測試...
1298 圓與三角形
1298 圓與三角形 hackerrank 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後...