http://acm.pku.edu.cn/JudgeOnline/problem?id=2780
题意是求最多有几颗星星在一条线上
#include <stdio.h> typedef struct { int x; int y; }Point; Point p[1001]; int number; void Read() { int i; for(i = 0;i < number;i ++) scanf("%d%d",&p[i].x,&p[i].y); } void Work() { int count,max = 0; int i,j,k; if(number == 1)//只有一颗星星的时候 printf("1/n"); else if(number == 2)//只有两颗星星的时候 printf("2/n"); else { for(i = 0;i < number-2;i ++) { for(j = i+1;j < number-1;j ++) { count = 2; for(k = j+1;k < number;k ++) { if((p[j].y-p[i].y)*(p[k].x-p[j].x) == (p[k].y-p[j].y)*(p[j].x-p[i].x))//判断斜率是否相等 count ++; } if(max < count) max = count;//求最大值 } } printf("%d/n",max); } } int main() { while(scanf("%d",&number) != EOF) { Read(); Work(); } return 0 ; }
/*
5
0 0
2 0
0 2
1 1
2 2
3
*/