比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。
=(m-r)条平行线与r条直线交叉的交点数
+ r条直线本身的交点方案
=(m-r)*r+r条之间本身的交点方案数(1<=r<=m
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[21][1003];
bool cmp(int a,int b)
{
return a<b;
}
int main()
{
a[1][0]=0;a[1][1000]=0;
a[2][0]=0;a[2][1]=1;a[2][1000]=1;
int i,j,k,tp,l,sum;
for(i=3;i<=20;i++)
{ a[i][0]=0;a[i][1000]=0;
for(l=1;l<i;l++)
{ tp=i-l;
for(j=0;j<=a[tp][1000];j++)
{
sum=l*tp+a[tp][j];
for(k=0;k<=a[i][1000];k++)
if(a[i][k]==sum)
break;
a[i][k]=sum;
if(k>a[i][1000])
a[i][1000]=k;
}
}
}
while(scanf("%d",&k)!=EOF)
{
sort(a[k],a[k]+a[k][1000]+1,cmp);
for(i=0;i<a[k][1000];i++)
printf("%d ",a[k][i]);
printf("%d\n",a[k][i]);
}
return 0;
}