(m-r)条平行线与r条直线交叉的交点数
+ r条直线本身的交点方案
=(m-r)*r+r条之间本身的交点方案数(0<=r<m)
#include<iostream>
using namespace std;
int n,sum[22][191],t;
void point(){
for(int i=0;i<=n;i++)
sum[i][0]=1;
for(int k=2;k<21;k++)
for(int i=1;i<k;i++)//求i的方案数!!!打表法t内的符合条件的都打出来;
for(int j=0;j<=i*(i-1)/2;j++)//由于j<i故j的方案数小于i的方案数i*(i-1)/2;
if(sum[i][j])//如果这是i的方案数;
sum[k][(k-i)*i+j]=1;//k的方案数为(n-i)*i+(i的方案数) :n-i为平行直线数
}
int main(){
while(cin>>n){
t=n*(n-1)/2;
point();
for(int i=0;i<t;i++)
if(sum[n][i])
cout<<i<<" ";
cout<<t<<endl;
}
return 0;}