题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。
给定平面上 2 × 3 个整点{(x, y)|0 ≤ x < 2, 0 ≤ y < 3, x ∈ Z, y ∈ Z},即横坐标 是 0 到 1 (包含 0 和 1) 之间的整数、纵坐标是 0 到 2 (包含 0 和 2) 之间的整数 的点。这些点一共确定了 11 条不同的直线。
给定平面上 20 × 21个整点 {(x, y)|0 ≤ x < 20, 0 ≤ y < 21, x ∈ Z, y ∈ Z},即横 坐标是 0 到 19 (包含 0 和 19) 之间的整数、纵坐标是 0 到 20 (包含 0 和 20) 之 间的整数的点。
请问这些点一共确定了多少条不同的直线。
解答:
美一条直线都有其确定的斜率和截距,只要这两个值不同时相同,即可确定这不是同一条直线,所以只需要求出所有有截距和斜率,并且截距和斜率的值不同的所有情况,再加上20种没有斜率的情况,即可得出答案。
l = [[x,y] for x in range(20) for y in range(21)]
a = set()
for i in range(len(l)):
for j in range(i+1,len(l)):
if l[i][0]!=l[j][0]:
k = (l[j][1]-l[i][1])/(l[j][0]-l[i][0]) #斜率公式,求出斜率
b = (l[i][0]*l[j][1] - l[i][1]*l[j][0])/(l[i][0]-l[j][0]) #求出相应的截距
if (k,b) not in a: #如果斜率和截距没有同时出现在a集合中,则加入a集合,即计算所有可能的情况
a.add((k,b))
print(len(a)+20)#因为有20种与x轴垂直的情况没有斜率,所以加上20即为最终答案