直线(蓝桥杯)

直线

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
在平面直角坐标系中,两点可以确定一条直线。如果有多点在一条直线上, 那么这些点中任意两点确定的直线是同一条。

给定平面上 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​) 之 间的整数的点。

请问这些点一共确定了多少条不同的直线。

解题思路

本题用点斜式:y=kx+b来表示直线。那么枚举所有点对构成的直线,判断k,b直线是新的,还是之前已经枚举过的,采用pair<double,double>存下k和b,如何判断当前直线是否为初次遇到的新直线呢?可用map判断是否是新的直线。对一条新的直线,映射(mao)成1,并统计累加,让ans++,下一次再找到这条直线,那么该直线的map值已经为1了,就不重复统计。分析题述中给定平面上2×3个整点,所确定的11条直线如下图:3条横向,2条竖线和6条斜线。
在这里插入图片描述
不妨首先把横线和竖线的条数统计到linenum直线总数中。根据题意,横坐标是0到19(包含0和19)之间的整数,那么竖线有20条,即col=20;纵坐标是0到20,那么有21条横线,即row=21。横线和竖线条数加起来先计入linenum,初值linunum=row+col。
然后来求斜线,由于任意两点可以确定一条直线。那么枚举所有的点,嵌套的两重循环i和j,都去枚举所有的点,点i和点j就能确定一条直线,现在来判断(i,j)构造出来的直线line(k,b)是否之前已经计入过linenum中。
如果是初次遇见的新直线line,那么就map其为1,并且计入linenum,即linenum++;否则表示之前已经出现过此直线line(k,b),就无需统计。一对(k,b)就能表示出一条直线。在枚举所有点之前,需要先保存所有点,存入数组p中。已知i、j两点,如何计算(k,b)?
用如下公式即可:
k=(p[j].y-p[i].y)/(p[j].x-p[i].x);
b=(p[j].xp[i].y-p[j].yp[i].x)/p[i].x-p[i].x);

最终答案:40257

在这里插入图片描述

C++代码

#include<iostream>
#include<map> 
#include<utility>
using namespace std;struct point{double x,y;
}p[25*25];map<pair<double,double>,int>line;//pair存斜率 k 和截距 b 
//map是STL的一个关联容器,他提供一对一的数据处理能力,使 点 与 直线 成 一对一对应关系
//用 (x,y) 这个点作为索引,并拥有相关联的指向 line(int)的指针 
//pair是将2个数据组合成一组数据 。 x,y 这两个数据组合成一个点 (x,y)以及 将 k,b这两个数据合成一组数据 int main()
{//struct point p[25*25];int cnt=0;int col=20,row=21;int i,j;for(i=0;i<col;i++){for(j=0;j<row;j++){p[cnt].x=i;p[cnt++].y=j;}}int linenum=col+row;//先确定横线和竖线的数量 for(i=0;i<cnt;i++){for(j=0;j<cnt;j++){if(p[i].x==p[j].x||p[i].y==p[j].y)//跳过横线和竖线 continue;//k=(y2-y1)/(x2-x1)//b=(x1y2-x2y1)/(x1-x2)double k=(p[j].y-p[i].y)/(p[j].x-p[i].x);double b=(p[i].x*p[j].y-p[j].x*p[i].y)/(p[i].x-p[j].x);if(line[{k,b}]==0){line[{k,b}]=1;linenum++;}} }cout<<linenum<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMD扩展molUP安装与高斯接口使用

molUP是一个VMD扩展&#xff0c;提供了一个简单的方式来加载和保存高斯文件&#xff0c;并分析相关的结果。 molUP为VMD提供了一个图形界面&#xff0c;用户可以加载和保存高斯文件格式的化学结构。这个扩展包括一组工具来设置高斯支持的任何计算&#xff0c;包括ONIOM通过互动…

静态内部类(内部类) - Java

静态内部类 StaticInnerClass01.java 说明&#xff1a;静态内部类是定义在外部类的成员位置&#xff0c;并且有static修饰 可以直接访问外部类的所有静态成员&#xff0c;包含私有的&#xff0c;但不能直接访问非静态成员。可以添加任意访问修饰符&#xff08;public.protec…

计算机网络基础知识自用

示例&#xff1a; 域名如&#xff1a;alibaba.com (URL地址) IP地址为&#xff1a;xx.233.xxs.12 (访问) 端口&#xff1a;80 1.ip Internet Protocol Address&#xff0c;又译为网际协议地址&#xff0c;常见的IP地址分为IPv4与IPv6两大类。目前我们使用的都是IPv4的地址&am…

音视频学习(十九)——rtsp收流(tcp方式)

前言 本文主要介绍以tcp方式实现rtsp拉流。 流程图 流程说明: 客户端发起tcp请求&#xff0c;如向真实相机设备请求&#xff0c;端口一般默认554&#xff1b;tcp连接成功&#xff0c;客户端与服务端开始rtsp信令交互&#xff1b;客户端收到play命令响应后&#xff0c;开启线…

Leetcode 501 二叉搜索树中的众数

题意理解&#xff1a; 首先明确&#xff1a; 二叉搜索树中序遍历是严格的单调递增序列&#xff0c;也就是说&#xff0c;传统意义上得到二叉搜索树不存在相同的数&#xff0c;也不可能存在众数。 所以&#xff1a; 这里的二叉搜索树不是严格意义上的二叉搜索树&#xf…

PVE中CT容器安装openwrt X86的极简方法

下载推荐&#xff1a;https://openwrt.ai/ 使用环境PVE8.0&#xff0c;openwrt是以上网址的最新版&#xff0c;内涵及其丰富组件。 问题来源&#xff1a; 在PVE虚拟机可以很方便的使用img文件&#xff0c;转换qm 成一个硬盘文件&#xff0c;加入到虚拟机也就完成了&#xff0c…

五、双向NAT

学习防火墙之前&#xff0c;对路由交换应要有一定的认识 双向NAT1.1.基本原理1.2.NAT Inbound NAT Server1.3.域内NATNAT Server —————————————————————————————————————————————————— 双向NAT 经过前面介绍&#xff0c;…

fiddler设置手机端抓包看这篇文章就足够了,轻松解决!

fiddler设置手机端抓包 安卓手机抓包 第一步&#xff1a;配置电脑和安卓的相关设置 1、手机和fiddler位于同一个局域网内&#xff1b;首先从fiddler处获取到ip地址和端口号&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; &#xff0c;点…

【Linux】coredump 文件的例子分析

1. 生成 core 文件 网上很多教程&#xff0c;我这里举一种 临时开启 生成 core 文件 # 0 就是没有开 coredump 功能 rootswd-Lenovo-G40-80:/home/swd/pros/c--learn/0.test_codes/demos# ulimit -c 0 # 设置值临时为 unlimited rootswd-Lenovo-G40-80:/home/swd/pros/c--le…

Java基础之常用类

Java基础之常用类 一、包装类1.1、Java基本数据类型及其对应的包装类1.2、包装类的自动装箱、自动拆箱机制1.3、包装类的优点 二、String类三、StringBuffer类和StringBuilder类3.1、主要区别&#xff1a;3.2、StringBuffer/StringBuilder用法(两者用法一致) 四、日期类4.1、Da…

setLineWrapMode 是 QTextEdit 类的成员函数,用于设置文本换行模式(Line Wrap Mode)

setLineWrapMode 是 QTextEdit 类的成员函数&#xff0c;用于设置文本换行模式&#xff08;Line Wrap Mode&#xff09;。 在 Qt 中&#xff0c;文本换行模式指定了文本编辑器中长行文本的显示方式。通过设置不同的换行模式&#xff0c;可以控制是否自动换行、如何换行以及是否…

[DASCTF 2023 0X401七月暑期挑战赛] web刷题记录

文章目录 EzFlask方法一 python原型链污染方法二 flask框架静态文件方法三 pin码计算 MyPicDisk方法一 字符串拼接执行命令方法二 phar反序列化 ez_cms EzFlask 考点&#xff1a;python原型链污染、flask框架理解、pin码计算 源码如下 import uuidfrom flask import Flask, re…

企业源代码防泄密的有什么痛点及难点?

安秉信息作为源代码防泄密的方案的提供商&#xff0c;对企业源代码防泄密有深入的了解。在企业中可以对普通 的文件&#xff0c;图纸进行加密保护这些文件的泄漏。但是企业管理者对于企业的源代码文件防泄密却没有更好的管理方案。 源代码防泄密最大的痛点是&#xff0c;现在企…

近五年—中国十大科技进展(2018年—2022年)

近五年—中国十大科技进展&#xff08;2018-2022&#xff09; 2022年中国十大科技进展1. 中国天眼FAST取得系列重要进展2. 中国空间站完成在轨建造并取得一系列重大进展3. 我国科学家发现玉米和水稻增产关键基因4. 科学家首次发现并证实玻色子奇异金属5. 我国科学家将二氧化碳人…

uni-app 微信小程序 pdf预览

<div click"getPDF">查看体检报告</div>getPDF() {uni.downloadFile({url: ${this.$baseURL}/file/download?id${this.pdfFileId},//编写在线的pdf地址success: function(res) {const filePath res.tempFilePath;uni.openDocument({filePath: filePath…

java stream流map和flatmap的区别

map和flatmap都是用来转换操作。 map()操作后的流与原始流的元素个数一一对应&#xff0c;一对一地进行元素转换&#xff0c;适用于对每个元素进行简单的转换操作&#xff0c;例如将元素的属性提取出来或进行数值计算。 flatMap()操作是一对多的元素转换&#xff0c;对于每个输…

Roll-A-Ball 游戏

Roll-A-Ball 游戏 1&#xff09;学习资料 b站视频教程&#xff1a;https://www.bilibili.com/video/BV18W411671S/文档&#xff1a; * Roll-A-Ball 教程&#xff08;一)&#xff0c; * Roll-A-Ball 教程&#xff08;二)线上体验roll-a-ball成品 * http://www-personal.umich.e…

使用opencv将sRGB格式的图片转换为BT.2020格式【sRGB】【BT.2020】

将sRGB格式的图片转换为BT.2020格式涉及到两个步骤&#xff1a;首先将sRGB转换到线性RGB&#xff0c;然后将线性RGB转换到BT.2020。这是因为sRGB图像通常使用伽马校正&#xff0c;而BT.2020工作在线性色彩空间中。 从sRGB到线性RGB&#xff1a;sRGB图像首先需要进行伽马校正解码…

Spring面向切面编程(AOP);Spring控制反转(IOC);解释一下Spring AOP里面的几个名词;Spring 的 IoC支持哪些功能

文章目录 Spring面向切面编程(AOP)什么是AOPSpring AOP and AspectJ AOP 的区别&#xff1f;Spring AOP中的动态代理如何理解 Spring 中的代理&#xff1f;解释一下Spring AOP里面的几个名词Spring在运行时通知对象Spring切面可以应用5种类型的通知&#xff1a;什么是切面 Aspe…

scoop bucket qq脚本分析(qq绿色安装包制作)

url字段 以qq.json为例&#xff0c;其对应的scoop配置文件在$env:scoop\buckets\extras\bucket\qq.json 其中的url字段 "url":"https://webcdn.m.qq.com/spcmgr/download/QQ9.7.17.29230.exe#/dl.7z"为qq安装包下载地址&#xff0c;后缀#/dl.7z为自行添加…