当前位置: 首页 > news >正文

计算直线的交点数

 

主要实现思路

  1. 整体流程思路
    • 程序旨在解决给定平面上不同数量的直线(无三线共点),求出每种直线数量下所有可能的交点数量,并按要求格式输出的问题。整体通过初始化一个二维数组来存储不同直线数量与交点数量对应的存在状态,先基于简单情况(全平行时交点数为 0)进行初始化,然后利用双重嵌套循环逐步推导更多直线数量下的交点情况,最后通过循环读取输入的直线数量,查找并输出对应直线数量下所有可能的交点数量,以此来处理多组测试数据,直到文件末尾结束运行。
  2. 具体步骤思路
    • 数组初始化阶段
      • 首先定义了一个二维数组 a[21][191],根据 n 条直线最多可有 (n - 1) * n / 2 个交点(这里考虑 n <= 20 的上限,所以第二维大小设为 191 能涵盖所有可能交点数情况),用于存储不同直线总数(行索引表示)与交点数量(列索引表示)之间的某种状态关系,初始将数组所有元素设为 0,表示初始时都不确定是否存在相应的直线与交点数量组合情况。
      • 接着通过 for (int i = 0; i < 21; i++) { a[i][0] = 1; } 循环将每一行(对应不同直线总数情况)中列坐标为 0 的元素值都设为 1,这是因为所有直线都平行时交点数必然为 0,先把这种基础的、确定的情况在数组中标记好,方便后续基于此推导其他情况。
    • 交点情况推导阶段(动态规划思想体现)
      • 外层 for (int x = 2; x <= 20; x++) 循环从 2 条直线开始,到 20 条直线为止,遍历不同的总直线数 x,目的是逐步计算每种直线总数下的交点情况。对于每个 x 值:
        • 中层 for (int n = 0; n <= x; n++) 循环遍历不平行部分的直线数量 n(范围从 0 到当前总直线数 x),这里 n 代表在 x 条直线里不平行的那些直线数量,通过改变 n 的值可以考虑各种不同的直线平行、相交组合方式,来推导对于总直线数 x 的交点情况。
        • 内层 for (int j = 0; j <= (n - 1) * n / 2; j++) 循环针对当前不平行直线数量 n 所能产生的交点数量范围(从 0 到 n 条直线最多能产生的交点数 (n - 1) * n / 2)进行遍历,用于检查在这种特定的 n 条不平行直线及其交点数 j 的组合下,能否推导出对于总直线数为 x 的交点情况。
        • 在这个三重循环内部,当发现对于 n 条直线存在 j 个交点(即 a[n][j] == 1)这种已知的有效交点情况组合时,就通过计算 (x - n) * n + j 来得到在 x 条直线中,若有 n 条直线按已有的 j 个交点情况排列,其余 (x - n) 条直线与这 n 条直线相交所能产生的交点数量,然后将数组 a[x][(x - n) * n + j] 的位置标记为 1,表示存在 x 条直线有这么多个交点的情况,通过这样不断利用已知的交点情况去推导更多直线数量下的交点情况,逐步填充数组 a,记录下各种可能的直线与交点数量的存在关系。
    • 结果输出阶段
      • 定义变量 n 用于接收输入的直线数量,通过 while (scanf("%d", &n)!= EOF) 循环读取多组测试数据,只要没读到文件末尾就持续处理新输入的直线数量情况。
      • 对于每次输入的直线数量 n,通过 for (int i = 0; i <= (n - 1) * n / 2; i++) 循环遍历 n 条直线所能产生的所有可能交点数量范围,检查数组 a[n][i] 的值,如果 a[n][i] == 1,说明对于 n 条直线存在 i 个交点这种情况是存在的,就输出这个交点数量 i,并且每个交点数量之间用一个空格隔开。
      • 当输出完一组直线数量 n 对应的所有交点数量后,通过 putchar('\n'); 输出一个换行符,使每组测试实例的输出结果都换行显示,符合题目要求的输出格式,接着继续循环读取下一组输入的直线数量进行处理,直到文件末尾结束整个程序的运行。

 

#include <stdio.h>int main()
{// n条直线最多可有(n - 1) * n / 2个交点,例如20条直线最多有190个交点,这里根据题目中直线数量上限(n <= 20)确定二维数组第二维的大小为191,以涵盖所有可能的交点数量情况int a[21][191] = { 0 };// 初始化二维数组a的所有元素为0,这个数组用于存储不同直线数量下对应不同交点数量是否存在的状态,后续通过计算来更新这些状态值// 例如a[i][j]中,i表示直线的总数,j表示交点的数量,a[i][j] = 1表示存在i条直线有j个交点这种情况,初始都设为0表示都还未确定是否存在相应情况// 外层循环初始化每一行(对应不同直线总数情况)中列坐标为0的元素值都为1,也就是表示所有直线都平行时(交点数为0)的情况,先将这种基础情况标记好for (int i = 0; i < 21; i++){a[i][0] = 1;}// 外层循环开始遍历不同的总直线数x,从2条直线开始(因为1条直线不存在交点情况已经在初始化时涵盖了平行无交点即a[1][0] = 1的情况),到20条直线为止,这个循环用于逐步推导更多直线数量下的交点情况for (int x = 2; x <= 20; x++){// 中层循环遍历不平行部分的直线数量n,范围是从0到当前总直线数x,这里n表示在x条直线中不平行的那些直线数量,通过改变n的值来考虑不同的直线平行、相交组合情况for (int n = 0; n <= x; n++){// 内层循环遍历当前不平行直线数量n所能产生的交点数量范围,也就是从0到n条直线最多能产生的交点数(n - 1) * n / 2,用于检查在这种特定的不平行直线数量及其交点数组合下,能否推导出对于更多直线(总直线数为x)的交点情况for (int j = 0; j <= (n - 1) * n / 2; j++){// 如果发现对于n条直线存在j个交点这种情况(即数组中对应位置的值为1),说明找到了一种已知的有效交点情况组合if (a[n][j] == 1){// 基于这种已知情况,去更新对于总直线数为x时的交点情况。计算(x - n) * n + j得到在x条直线中,当有n条直线按已有的j个交点情况排列,其余(x - n)条直线与这n条直线相交所能产生的交点数量,将对应的数组位置标记为1,表示存在x条直线有这么多个交点的情况a[x][(x - n) * n + j] = 1;}}}}// 定义变量n,用于接收输入的直线数量,通过循环读取多组测试数据,只要没读到文件末尾(EOF)就持续处理输入的直线数量情况int n;while (scanf("%d", &n) != EOF){// 循环遍历当前输入的直线数量n所能产生的所有可能交点数量范围,也就是从0到(n - 1) * n / 2,去检查哪些交点数量情况是存在的(对应数组位置值为1)for (int i = 0; i <= (n - 1) * n / 2; i++){// 如果发现对于n条直线存在i个交点这种情况(即a[n][i] == 1),就输出这个交点数量if (a[n][i] == 1){printf("%d ", i);}}// 每组输出结束后,输出一个换行符,使每组测试实例的输出结果换行显示,更符合输出格式要求putchar('\n');}return 0;
}

 

相关文章:

计算直线的交点数

主要实现思路 整体流程思路&#xff1a; 程序旨在解决给定平面上不同数量的直线&#xff08;无三线共点&#xff09;&#xff0c;求出每种直线数量下所有可能的交点数量&#xff0c;并按要求格式输出的问题。整体通过初始化一个二维数组来存储不同直线数量与交点数量对应的存在…...

STM32基于HAL库的串口接收中断触发机制和适用场景

1. HAL_UART_Receive_DMA函数 基本功能 作用&#xff1a;启动一个固定长度的 DMA 数据接收。特点&#xff1a; 需要预先指定接收数据的长度&#xff08;Size 参数&#xff09;。DMA 会一直工作直到接收到指定数量的数据&#xff0c;接收完成后触发 HAL_UART_RxCpltCallback 回…...

java面试宝典

本文只摘抄部分宝典内容&#xff0c;完整宝典可以在打开下方链接&#xff0c;在网盘获取 ^ _ ^ 链接:java面试宝典 提取码: wxy1 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 链接: java前端面试宝典 提取码: wxy1 复制这段内容后打开百度网盘手机App&#xff…...

Scala—Slice(提取子序列)方法详解

Scala—Slice&#xff08;提取子序列&#xff09;方法详解 在 Scala 中&#xff0c;slice 方法用于从集合中提取一个连续的子序列&#xff08;切片&#xff09;。可以应用于多种集合类型&#xff0c;如 List、Array、Seq 等。 一、slice 方法的定义 slice 根据提供的起始索引…...

【电子通识】案例:USB Type-C USB 3.0线缆做直通连接器TX/RX反向

【电子通识】案例:连接器接线顺序评估为什么新人总是评估不到位?-CSDN博客这个文章的后续。最近在做一个工装项目,需要用到USB Type-C线缆做连接。 此前已经做好了线序规划,结果新人做成实物后发现有的USB Type-C线缆可用,有的不行。其中发现USB3.0的TX-RX信号与自己的板卡…...

【SKFramework框架核心模块】3-5、函数扩展模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…...

使用 EasyExcel 提升 Excel 处理效率

目录 前言1. EasyExcel 的优点2. EasyExcel 的功能3. 在项目中使用 EasyExcel3.1 引入依赖3.2 实体类的定义与注解3.3 工具类方法的实现3.4 在 Controller 中使用 4. 总结5. 参考地址 前言 在日常开发中&#xff0c;Excel 文件的处理是不可避免的一项任务&#xff0c;特别是在…...

【提高篇】3.7 GPIO(七,GPIO开发模型 一)

目录 一,开发模型 二,初始化函数 2.1 时钟使能 一,开发模型 通常我们在进行GPIO相关外设的开发时,往往遵循下面4个步骤,如下: 初始化函数 用于进行时钟设置、参数设置、IO设置、中断设置等。读处理函数 用于从外设读取数据。写处理函数 用于从向外设写数据。中断处理…...

Webpack Tree Shaking 技术原理及应用实战,优化代码,精简产物

前言 在前端开发中&#xff0c;优化代码体积和提升应用性能是至关重要的课题。Webpack 提供了多种优化手段来帮助开发者实现这一目标&#xff0c;Tree Shaking 就是其中一种非常重要的优化技术&#xff0c;它通过在编译阶段移除未被使用的代码模块&#xff0c;从而显著减小最终…...

angular19-官方教程学习

周日了解到angular已经更新到19了&#xff0c;想按官方教程学习一遍&#xff0c;工欲善其事必先利其器&#xff0c;先更新工具&#xff1a; 安装新版版本 卸载老的nodejs 20.10.0&#xff0c;安装最新的LTS版本 https://nodejs.org 最新LTS版本已经是22.12.0 C:\Program File…...

RocketMQ集群部署完整指南

前言 本文将详细介绍RocketMQ集群的部署流程,包括环境准备、安装配置、启动运维等各个方面。 一、环境准备 1.1 系统要求 64位操作系统,建议LinuxJDK 1.8及以上版本源码安装需要Maven 3.2.x1.2 下载RocketMQ 可从以下地址获取RocketMQ安装包: Apache官方开源地址: http://r…...

解决mysql 内存持续上涨问题

问题背景&#xff1a; 业务量不大&#xff0c;Mysql 内存持续上涨&#xff0c;虽然不是很明显&#xff0c;但随着时间慢慢增长&#xff0c;1~2个月左右内存达到80%一旦有一些执行缓慢的sql 内存会快速上去增加/修改大表的字段内存会快速上去 常规操作&#xff1a; Mysql 设置…...

Qt 小项目 学生管理信息系统

主要是对数据库的增删查改的操作 登录/注册界面&#xff1a; 主页面&#xff1a; 添加信息&#xff1a; 删除信息&#xff1a; 删除第一行&#xff08;支持多行删除&#xff09; 需求分析&#xff1a; 用QT实现一个学生管理信息系统&#xff0c;数据库为MySQL 要求&#xf…...

16-01、JVM系列之:内存与垃圾回收篇(一)

JVM系列之&#xff1a;内存与垃圾回收篇&#xff08;一&#xff09; ##本篇内容概述&#xff1a; 1、JVM结构 2、类加载子系统 3、运行时数据区之&#xff1a;PC寄存器、Java栈、本地方法栈一、JVM与JAVA体系结构 JAVA虚拟机与JAVA语言并没有必然的联系&#xff0c;它只是与特…...

聊聊系统的弹力设计-服务器性能指标篇(一)

一、什么是弹性机制 弹性&#xff0c;大家可以轻易的联想到橡胶&#xff0c;可伸缩性是弹性机制的一个很重要的特点&#xff0c;但是实际上弹性不等同于可伸缩性 弹性&#xff08;Elasticity&#xff09; 通常指的是系统能够自动适应负载的变化&#xff0c;即自动扩展和收缩资…...

MQ:kafka-消费者的三种语义

文章目录 前言(一) 创建topic(二) 生产者&#xff08;三&#xff09;消费者1. At-most-once Kafka Consumer2. At-least-once kafka consumer3. 使用subscribe实现Exactly-once4. 使用assign实现Exactly-once 前言 本文主要是以kafka 09的client为例子&#xff0c;详解kafka c…...

中国1km分辨率SSP119情景(SSP119、SSP245 SSP585),模式逐月降水量数据集(2021-2100)

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 干旱监测平台 中国1km分辨率SSP119情景EC-Earth3模式逐月降水量数据集(2021-2100) 简介 该数据集为中国多情景多模式逐月降水量数据&#xff0c;空间分辨率为0.0083333&#xff08;约1km),时间为2021年1月-2100年…...

21天掌握javaweb-->第8天:前后端分离架构与Axios请求

前后端分离架构概念 前后端分离架构是一种现代Web应用开发模式,其中前端和后端分别独立开发和部署,通过API进行数据交互。这种架构使得前端专注于用户界面和用户体验,而后端则专注于业务逻辑和数据处理。 优势 开发效率高:前后端可以并行开发,减少了开发时间。技术栈灵活…...

基于阻塞队列的生产者消费者模型动画演示

一个基于阻塞队列的生产者消费者模型的动画演示&#xff1a; 这是打包好的程序。程序是用 QT 写的。 通过网盘分享的文件&#xff1a;CP模型.7z 链接: https://pan.baidu.com/s/1YjC7YiSqHGqdr6bbffaDWg?pwde6g5 提取码: e6g5 CP模型...

DHCP和BOOTP选项及DHCP协议操作详解

DHCP和BOOTP选项及DHCP协议操作详解 DHCP与BOOTP简介 1. BOOTP&#xff08;Bootstrap Protocol&#xff09; 功能&#xff1a;提供静态配置的IP分配。用途&#xff1a;在早期用于无盘工作站启动时获取IP地址和基本配置。缺点&#xff1a;只能提供静态IP配置&#xff0c;无法动…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...