TOJ 1504: 计算直线的交点数

 
 
Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByte
Total Submit: 264            Accepted:129

Description

平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。
比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。

Input

输入数据包含多个测试实例,每个测试实例占一行,每行包含一个正整数n(n<=20),n表示直线的数量.

Output

每个测试实例对应一行输出,从小到大列出所有相交方案,其中每个数为可能的交点数,每行的整数之间用一个空格隔开。

Sample Input

2
3

Sample Output

0 1
0 2 3

Source

HDOJ



#include<stdio.h>
int main()
{
	int n,i,j,num,a[21][191] = {0},k;//当n==20时最多为190个交点 
	for(i = 0; i <= 20; i++)
		a[i][0] = 1;
	for(k = 2; k <= 20; k++)
	{
		for(i = 1; i < k; i++)
		{
			for(j = 0; j <= 190; j++)
			{
				if(a[i][j] == 1)
					a[k][j + i * (k - i)] = 1;
			}
		}
	}
	while(~scanf("%d",&n))
	{
		printf("0");//第一个为0直接先输出 
		num = (n - 1) * n / 2;//n条直线互不平行且无三线共点的最多交点数 max=1+2+……(n-1)=n(n-1)/2.
		for(i = 1; i <= num; i++)
			if(a[n][i])
				printf(" %d",i);
		printf("\n");
	}
}


猜你喜欢

转载自blog.csdn.net/u013780740/article/details/27377273