
是结果填空题,思路是用两个数学公式1. (y1-y2)=k*(x1-x2); 2. y=k*x+b 来计算出所有的k和b放入到结构体里,写个重载排个序(注意我们k的特殊情况为0,有20条直线即x=0,x=1,x=2,x=3......,这个我们先不将其放入结构体里,再最后计算的时候加上就可以了)。for循环看有多少不同的k,b即可。
注意double的精度问题,这里我们认定当 两个double数的差>1e-8 时二者为不同数,<=1e-8时,二者为相同的数。🌴
答案:40257
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
struct node{
double k,b;
bool operator<(const node&t){
if(k!=t.k)return k<t.k;
else return b<t.b;
}
}l[1000010];
int main()
{
for(int x1=0;x1<20;x1++)
{
for(int y1=0;y1<21;y1++)
{
for(int x2=0;x2<20;x2++)
{
for(int y2=0;y2<21;y2++)
{
if(x1!=x2)
{
double k=(double)(y1-y2)/(x1-x2);
double b=y1-k*x1;
l[n++]={k,b};
}
}
}
}
}
sort(l,l+n);
int ans=1;
for(int i=1;i<n;i++)
{
if(fabs(l[i].b-l[i-1].b>1e-8)||fabs(l[i].k-l[i-1].k)>1e-8)
ans++;
}
cout<<ans+20;
return 0;
}
该博客主要讨论如何使用数学公式计算直线方程的参数k和b,并将这些参数存储在结构体中进行排序。博客内容涉及双层循环计算不同直线,通过比较k和b的值进行唯一性判断,并考虑了k为0的特殊情况。最终,程序计算并输出了不同直线的数量。
782

被折叠的 条评论
为什么被折叠?



