HDU 1466 計算直線的交點數

2021-06-25 13:08:52 字數 1350 閱讀 8305

problem description

平面上有n條直線,且無三線共點,問這些直線能有多少種不同交點數。

比如,如果n=2,則可能的交點數量為0(平行)或者1(不平行)。

input

輸入資料報含多個測試例項,每個測試例項佔一行,每行包含乙個正整數n(n<=20),n表示直線的數量.

output

每個測試例項對應一行輸出,從小到大列出所有相交方案,其中每個數為可能的交點數,每行的整數之間用乙個空格隔開。

sample input

23  

sample output

0 1

0 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 = 4

2*(n-2) + 1 = 5

4. 四條直線互不平行, 交點數為1*(n-1) + :

1*(n-1)+0=3 

1*(n-1)+2=5 

1*(n-1)+3=6

即n=4時,有0, 3, 4, 5, 6個不同的交點數.所以有5種可能。

從上述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為例 分類方法 和...