2 3
0 1 0 2 3
1、第四条与其余直线全部平行 => 0+4*0+0=0;
2、第四条与其中两条平行,交点数为0+(n-1)*1+0=3;即n=4时,有0个,3个,4个,5个,6个不同交点数。
从上述n=4的分析过程中,我们发现:
m条直线的交点方案数
=(m-r)条平行线与r条直线交叉的交点数
+ r条直线本身的交点方案
=(m-r)*r+r条之间本身的交点方案数(0<=r<m)
#include <iostream> #include <cstring> #include <vector> #include <algorithm> using namespace std; #define MAX 21 int main() { freopen("in.txt", "r", stdin); int n, i, j, k, x; vector<int>array[MAX]; array[1].push_back(0); array[2].push_back(0); array[2].push_back(1); for(i = 3; i < MAX; i++) //第i条直线 { for(j = 0; j < i; j++) { if(j == 0) { array[i].push_back(0); } else { for(k = 0; k < array[j].size(); k++) { array[i].push_back((i - j) * j + array[j][k]); } } } sort(array[i].begin(), array[i].end()); } while(cin >> n) { x = array[n][0]; cout << x << " "; for(i = 1; i < array[n].size() - 1; i++) { if(x != array[n][i]) cout << array[n][i] << " "; x = array[n][i]; } if(x != array[n][array[n].size() - 1]) cout << array[n][i] << endl; } return 0; }