题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。
请问这些点一共确定了多少条不同的直线。
解释:
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<pair<double,double>> line; // 使用 set 存储直线的斜率和截距对
double k, b; // 斜率和截距
for(int x1 = 0; x1 < 20; x1++) { // 第一个点的 x 坐标范围 [0, 19]
for(int y1 = 0; y1 < 21; y1++) { // 第一个点的 y 坐标范围 [0, 20]
for(int x2 = x1 + 1; x2 < 20; x2++) { // 第二个点的 x 坐标范围 [x1+1, 19]
for(int y2 = 0; y2 < 21; y2++) { // 第二个点的 y 坐标范围 [0, 20]
// 计算直线的斜率和截距
k = (double)(y1 - y2) / (x1 - x2); // 斜率公式
b = (double)(x1 * y2 - x2 * y1) / (x1 - x2); // 截距公式
line.insert({k, b}); // 将斜率和截距对插入到 set 中,自动去重
}
}
}
}
cout << line.size() + 20; // 输出结果,加上额外的20是因为斜率为无穷大的情况
return 0;
}