您的位置:首页 > 其它

1466 计算直线的交点数

2012-03-22 23:22 211 查看
# include <iostream>
# include <cstdio>
using namespace std;
int main()
{
int n, i, j, k;
int edge[21][191];
for (i=1; i<21; ++i)
{
for (j=0; j<=190; ++j)
{
if (j == 0)
edge[i][j] = 1;
else
edge[i][j] = 0;
}
}
for (i=2; i<=20; ++i)
{
for (j=i-1; j>=1; --j)
{
for (k=0; k<=190; ++k)
{
if (edge[i-j][k] == 1)
{
edge[i][k+(i-j)*j] = 1;
}
}
}
}
while (scanf("%d", &n)!=EOF)
{
cout<<"0";
for(j=1;j<=n*(n-1)/2;j++)
if(edge
[j])
cout<<" "<<j;
cout<<endl;
}
return 0;
}


计算直线的交点数

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2283 Accepted Submission(s): 989


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

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

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

Sample Input

2 3


Sample Output

0 1 0 2 3


解题思路:
对于任意的n(n为正整数)条直线
有以下情况:
1条平行(全不平行)时,(n-1)条线的所有情况+(n-1)*1
2条平行,(n-2)条线的所有情况+(n-2)*2
...
i条平行,(n-i)条线的所有情况+(n-i)*i
...
n-1条平行,1条线的所有情况+ 1*(n-1)
以上所说i条平行,是指保证其余n-i条一定不平行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: