星星的组成结构(数星星二)
一天,小明坐在院子里数星星,Gardon就出了个难题给他,让他数数天上的星星最多有多少个是在同一条直线上的天上的星星太多了,小明马上就看花了眼,你能写个程序来帮他计算么?,下面我们就来聊聊关于星星的组成结构?接下来我们就一起去了解一下吧!
星星的组成结构
ICPC--1196: 数星星(二)(结构体专题)题目描述一天,小明坐在院子里数星星,Gardon就出了个难题给他,让他数数天上的星星最多有多少个是在同一条直线上的。天上的星星太多了,小明马上就看花了眼,你能写个程序来帮他计算么?
输入首先输入一个整数N(N<=300),接下来的N对数每对表示一个星星的位置(星星的坐标在-10000到10000之间,精确到小数点后1位)。没有两个星星会在同一个位置。
输出一个整数,表示一条直线上最多星星的数目。
样例输入
5
0 0
1 0
1 1
0 1
0.5 0.5
3
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 301
/*
1.两点确定一条直线
2.n>3时,先找出两个点确定一条直线,在剩余的n-2个点中找出在该直线上点的个数
存放在数组中,数组大小(n-2)*(n-1)/2
3.判断第三个点是否与前两个点在同一条直线上
(y3-y1)/(x3-x1)=(y3-y2)/(x3-x2) 没有将斜率不存在包含进去
(y3-y1)*(x3-x2)==(y3-y2)*(x3-x1)
*/
typedef struct point{
double x;
double y;
}point;
int main(){
int n,h=0,a[45000]={0},max=0;
point p[N];
scanf("%d",&n);
for(int i=0;i<n;i ){
scanf("%lf %lf",&p[i].x,&p[i].y);
}
if(n==1) {
printf("1\n");
return 0;
}
if(n==2) {
printf("2\n");
return 0;
}
for(int i=0;i<n-2;i ){
for(int j=i 1;j<n-1;j ){
for(int k=j 1;k<n;k ){
if((p[k].y-p[i].y)*(p[k].x-p[j].x)-(p[k].x-p[i].x)*(p[k].y-p[j].y)==0)
a[h] ;
}
h ;
}
}
for(int i=0;i<h;i ){
if(a[i]>max) max=a[i];
}
printf("%d\n",max 2);
return 0;
}
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com