小白备战蓝桥杯打卡06

直线

import os
import sys

# 请在此输入您的代码
Zb = []

for i in range(0,20):
  for j in range(0,21):
    Zb.append([i,j])

d = set()#对重复的直线进行筛选

for i in Zb:
    for j in Zb:
        if j[0] != i[0]:
            k = (j[1]-i[1])/(j[0]-i[0])#点斜式公式
            b = (j[0]*i[1] - i[0]*j[1])/(j[0] - i[0])#两点式公式推导得到截距公式
            c = (k,b)
            if c not in d:
                d.add(c)
print(len(d)+20)#一共有20组座标形成的直线垂直于x轴

思路:

  1. 分析问题,得到考点为直线公式的运用。

  1. 如何确定两条直线是否重叠(为同一条直线)——分析其直线方程y = kx + b 中的k(斜率)和b(截距)是否相等。

  1. 把问题转化为求解两点组成的直线的k,b。

  1. 首先创建一个列表Zb,把符合题目条件的点座标存到里面

  1. 新建一个集合d,用于去除斜率和截距相同的直线

  1. 用一个嵌套循环,把一个点和另外所有的点进行组合,求每组的k和b,注意第二层循环要设置一个条件,横坐标不相等时才进行循环(直线垂直的情况)。

  1. 然后把每组k和b存到集合d里面用集合的性质自动进行去重。

  1. 最后打印输出集合的长度,再加上20条垂直x轴的直线即可得到答案。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值