主要就是找不同的直线,直线最先想到斜率,但是仅仅凭借斜率是不能确定一条直线,所以还需要截距
y=kx+b
来确定一条直线
代码:
#include<bits/stdc++.h>
using namespace std;
set<pair<double, double> > zx;// 直线的k和b
int main()
{
for(double x1=0;x1<20;x1++)
{
for(double y1=0;y1<21;y1++)
{
for(double x2=0;x2<20;x2++)
{
for(double y2=0;y2<21;y2++)
if(x1!=x2)//避免斜率不存在的情况
{
double k=(double)(y2-y1)/(x2-x1); //斜率
// double b=y2-k*x2;
double b=(double)(y1*x2-y2*x1)/(x2-x1);//截距
zx.insert({k, b});
}
}
}
}
cout<<zx.size()+20;
return 0;
}
注意:因C++无控制double变量小数位数的函数,所以要注意截距b在计算时不可直接用上述算出的k来直接带入计算,因为double本身取值会造成误差,带入计算则会造成二次误差,影响结果。在这里对b的计算进行化简合并:
crazy