蓝桥杯12届B组题C的疑问,在20行,19列的整数坐标轴上,任意两点相连构成一条直线,问不同的直线有几条。
#include <stdio.h>
#include<math.h>
int main()
{
int total=0,i;
float x1=0,y1=20,x2,y2;
float a,c,k[100000]={0},b[100000]={0};
for(;y1>=0;x1++)//x1,y1
{
x1!=19?(x2=x1+1,y2=y1):(x2=0,y2=y1--);
for(;y2>=0;x2++)//x2,y2
{
if(x1==x2)goto x;
a=(y1-y2)/(x1-x2);
c=y1-(a*x1);
total++;
for(i=1;i<=total;i++)//查重
{
if(fabs(k[total]-a)<0.0000001&&fabs(b[total]-c)<0.0000001)
{
total--;
break;
}
}
if (i==total+1)
{
k[total]=a;
b[total]=c;
}
x: if(x2==19)
{
y2--;
x2=-1;
}
}
if(x1==19)
{
y1--;
x1=-1;
}
}
printf("%d",total+19);
return 0;
}
求得结果为43928,参考答案为40257
遍历所有两点,通过计算斜率a与常数项c来判断直线是否相同,
我想要达到的结果