problem description
平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。
比如,如果n=2,則可能的交點數量為0(平行)或者1(不平行)。
input
輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n(n<=20),n表示直線的數量.
output
每個測試例項對應一行輸出,從小到大列出所有相交方案,其中每個數為可能的交點數,每行的整數之間用乙個空格隔開。
sample input
23
sample output
0 10 2 3
做法:首先根據題目已知的n<=20算出最大交點個數:max=n*(n-1)/2
將n條直線排成乙個序列,直線2和直線1最多只有乙個交點,直線3和直線1,2最多有兩個交點,……,直線n 和其他n-1條直線最多有n-1個交點。由此得出n條直線互不平行且無三線共點的最多交點數:
所以 max = 1 +2 +……+(n-1)=n(n-1)/2;
這些直線有多少種不同的交點數
當n = 1, 2, 3時情況很容易分析。當n = 4 時,我們可以按如下分類方法,逐步計算。
1. 四條直線全部平行,無交點。
2. 其中三條平行,交點數: 3*(n-3)+0 = 3;
3. 其中兩條平行,而另外兩條直線的交點既可能平行也可能相交,因此交點資料分別為:
2*(n-2) + 0 = 44. 四條直線互不平行, 交點數為1*(n-1) + :2*(n-2) + 1 = 5
1*(n-1)+0=3即n=4時,有0, 3, 4, 5, 6個不同的交點數.所以有5種可能。1*(n-1)+2=5
1*(n-1)+3=6
從上述n=4的分析過程中,發現:
m條直線的交點數=r條平行線與m-r條直線交叉的交點數+ m-r條直線本身的交點數 =r*(m-r) + m-r條直線之間的交點數。(1<=r<=m)
二維陣列 p[i][j] 表示i條直線,j個交點數是否存在。存在值為1,不存在值為0.
**如下:
#include#includeint p[21][195];
int main()
{ int n,i,j;
memset(p,0,sizeof(p));
for(i=0;i<=20;i++)
p[i][0]=1;
for(n=2;n<=20;n++)
{ for(i=1;i
hdu 1466 計算直線的交點數
include intmain return0 一 n條直線把空間分成幾部分 現在說地是空間了,不是平面了,要注意!我們來討論一下吧 點分線 0維分1維 c n,1 c n,0 線分面 1維分2維 c n,2 c n,1 c n,0 麵分空間 2維分3維 c n,3 c n,2 c n,1 c n,...
hdu 1466 計算直線的交點數
平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。比如,如果n 2,則可能的交點數量為0 平行 或者1 不平行 input 輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n n 20 n表示直線的數量.output 每個測試例項對應一行輸出,從小到大列出所有相交方案,...
HDU1466 計算直線的交點數
1 n條直線互不平行且無三線共點的最多交點數max 1 2 n 1 n n 1 2 2 一般統計的方法 假設一共有n a b條直線 即n條直線分成2組,分別為a條和b條 則 總的交點數 a內的交點數 b內的交點數 a,b之間的交點數 3 我們來分析加入第n條直線的情況 這裡以n 4為例 分類方法 和...