計算直線的交點數
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7262 Accepted Submission(s): 3227
比如,如果n=2,則可能的交點數量爲0(平行)或者1(不平行)。
#include <stdio.h>
#include <stdlib.h>
int a[21][191];//a[i][j]==1表示i條邊會有j個交點
int main()
{
int i,j,k,n;
/**最開始將數組清爲0**/
for(i=0; i<=20; i++)
for(j=0; j<=190; j++)
a[i][j]=0;
/**不管你有幾條線,都有可能是0個交點**/
for(i=1; i<=20; i++)
a[i][0]=1;
/**遞推的過程i表示邊數,j表示自由的邊數,k表示有多少交點數,利用動態轉移方程(i-j)*j+j條直線可能的交點數**/
for(i=2; i<=20; i++)
for(j=0; j<i; j++)
for(k=0; k<=190; k++)
if(a[j][k]==1)
a[i][(i-j)*j+k]=1;
while(scanf("%d",&n)!=EOF)
{
printf("0");//這裏提前輸出一個0,是爲了控制格式符合要求
for(i=1; i<=n*(n-1)/2; i++)
if(a[n][i]!=0)
printf(" %d",i);
printf("\n");
}
return 0;
}