题意:给定N个坐标点, 现在要求出在共线的点的个数,输出最大值
思路:利用叉积,三点共线问题。
点a1, a2, a3, a4,a5.....an;
依次求任意两点组成的向量P , 与P共线的点的个数。
叉积:向量P,向量Q 若P * Q == 0 则说明向量P , 和Q 共线。
P (x1, y1), Q(x2, y2) P * Q = x1*y2- x2*y1;
11306536 | NY_lv10 | 1118 | Accepted | 256K | 469MS | C++ | 504B | 2013-03-03 15:03:50 |
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int n; 7 int i, j, k; 8 int t_max, maxx; 9 int x[800], y[800]; 10 while (cin>>n && n!=0) 11 { 12 for (i=0; i<n; i++) 13 cin>>x[i]>>y[i]; 14 maxx = 0; 15 for (i=0; i<n; i++) //点a1 16 for (j=i+1; j<n; j++) //点a2 17 { 18 t_max = 0; 19 for (k=j+1; k<n; k++) //点a3 20 //叉积等于0 共线 21 if ((x[j] - x[i]) * (y[k] - y[i]) - (y[j] - y[i]) * (x[k] - x[i]) == 0) //a2a1 * a3a1 == 0 则三点共线 22 23 t_max++; 24 maxx = maxx < t_max ? t_max : maxx; 25 } 26 cout<<maxx+2<<endl; 27 } 28 return 0; 29 }