这个程序怎么编写阿,请高手指点,急,在线等……?
已知平面上(直角坐标系)的N个点,请编写一个程序,求同一条直线所能通过的最多点数。
程序代码:#include "stdio.h"
#define N 11
struct DJ
{
float x;
float y;
};
int main()
{
int maxnum=0;
struct DJ all[N];
//初始化
for(int i=0;i!=N;++i)
if(scanf("%f%f",&all[i].x,&all[i].y)==EOF)
break;
//start
for(int i=0,k;i!=N;++i)
{
int temp[N] = {0};
float value[N] = {0};
for(int j=i+1;j!=N;++j)
{
value[j]=(all[i].y - all[j].y)/(all[i].x - all[j].x);
//寻找是否有一样的斜率
for(k=i+1;k!=j;++k)
if(value[k]==value[j])
break;
//记录斜率相同点数
temp[k]++;
}
for(int i=0;i!=N;++i)
if(maxnum<temp[i])
maxnum=temp[i];
}
printf("%d",maxnum+1);
return 0;
}看了看 用斜率做非常限制斜率的要求,应为斜率可能相当大,也可能为零,可以考虑用其它方法做
