每日c/c++题 备战蓝桥杯(Cantor 表)

Cantor 表的探究与实现

在数学中,有理数的可枚举性是一个令人惊叹的结论。今天,就让我们一起深入探讨这个经典问题,并分享一段精心编写的代码,揭开这一数学奥秘的神秘面纱。

问题背景

在 19 世纪末,伟大的数学家康托尔(Georg Cantor)证明了有理数是可枚举的。他采用了一种巧妙的 Z 字形排列方式,将所有的有理数按顺序排列在一个无限表格中,从而使每个有理数都能被唯一地枚举出来。

这种排列方式的规律如下:

  • 第一层只有分数 1/1。
  • 第二层包含分数 1/2 和 2/1。
  • 第三层包含分数 1/3、2/2 和 3/1。
  • 第四层包含分数 1/4、2/3、3/2 和 4/1。
  • 此类依推,每一层的分数个数递增。

这种排列方式使得每个有理数都可以被唯一地映射到一个整数,从而证实了有理数的可数性。

解题思路

面对这一问题,关键在于找到一种有效的算法,能够根据给定的整数 n,快速且准确地找到对应的有理数。以下是解决该问题的详细思路:

1. 确定层级关系

首先,我们需要确定给定的整数 n 所在的层级(即第几层)。每一层的分数个数遵循一定的规律:第 t 层的分数个数为 t。因此,第 t 层的起始位置可以通过公式 t*(t-1)/2 +1 来计算,而结束位置则是 t*(t+1)/2。

通过不断累加每一层的分数个数,直到累计值不超过 n 的最大位置,我们就能确定 n 所在的层级。例如,如果 n=7,我们发现它位于第 4 层(第 4 层的起始位置是 7,结束位置是 10)。

2. 判断奇偶性

每一层的排列方向交替变化。这使得奇数层和偶数层的分子、分母变化规律有所不同:

  • 偶数层:分子从大到小递减,分母从小到大递增。
  • 奇数层:分子从小到大递增,分母从大到小递减。

因此,在确定层级后,需要根据层级的奇偶性来调整分子和分母的计算方式。

3. 计算分子和分母

在确定层级 t 后,我们需要计算出该层的起始位置 s。然后,根据 n 与 s 的差值,逐步调整分子和分母的值,直到找到对应的有理数。

例如,假设我们已经确定 n=7 位于第 4 层,且第 4 层为偶数层,那么起始位置 s=7(即该层的第一个分数是 1/4)。此时,n刚好等于s,所以对应的分数就是起始分数,即 1/4。

如果 n 不等于起始位置,我们需要在该层内逐步调整分子和分母。例如,假设 n=8,那么它位于第 4 层的第二个位置。此时,分子会减 1,分母会加 1,得到分数 2/3。

代码实现

#include <bits/stdc++.h>
using namespace std;int main() {int n;cin >> n;int s = 1;int t = 1;// 确定层级while (s <= n) {t++;s = t * (t + 1) / 2;}t--;// 判断奇偶性并计算分子分母if (t % 2 == 0) {int zi = t + 1, mu = 1;s = t * (t + 1) / 2;if (s == n) {cout << t << "/1";} else {for (int i = 1;; ++i) {if (s + i == n) {cout << zi << "/" << mu;break;} else {zi--;mu++;}}}} else {int zi = 1, mu = t + 1;s = t * (t + 1) / 2;if (s == n) {cout << "1/" << t;} else {for (int i = 1;; ++i) {if (s + i == n) {cout << zi << "/" << mu;break;} else {zi++;mu--;}}}}return 0;
}

让我们详细解析一下这段代码的逻辑:

  1. 输入读取和变量初始化:首先读取输入的整数 n,并初始化变量 s 和 t 用于计算层级。
  2. 确定层级:通过循环不断累加每一层的分数个数,直到找到包含 n 的层级 t。
  3. 判断奇偶性:根据层级 t 的奇偶性,确定该层的排列方向。
  4. 计算起始位置和分子分母:计算该层的起始位置 s,并根据起始位置和 n 的差值,逐步调整分子和分母的值。
  5. 输出结果:当找到对应的分数时,输出结果。

总结

通过以上探索,我们不仅理解了康托尔表的规律,还成功实现了能够根据整数 n 快速定位对应有理数的代码。这个过程中,我们体会到了数学与编程的完美结合,以及通过逻辑思考解决问题的乐趣。希望这篇博客能为你带来启发,也期待你在编程的世界中发现更多奇妙的奥秘!

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

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

相关文章

解决idea与springboot版本问题

遇到以下问题&#xff1a; 1、springboot3.2.0与jdk1.8 提示这个包org.springframework.web.bind.annotation不存在&#xff0c;但是pom已经引入了spring-boot-starter-web 2、Error:Cannot determine path to tools.jar library for 17 (D:/jdk17) 3、Error:(3, 28) java: …

Notepad++找回自动暂存的文件

场景&#xff1a; 当你没有保存就退出Notepad&#xff0c;下次进来Notepad会自动把你上次编辑的内容显示出来&#xff0c;以便你继续编辑。除非你手动关掉当前页面&#xff0c;这样Notepad就会删除掉自动保存的内容。 问题&#xff1a; Notepad会将自动保存的文件地址,打开Note…

yolov12毕设前置知识准备 1

1 什么是目标检测呢&#xff1f; 目标检测&#xff08;Object Detection&#xff09;主要用于识别图像或视频中特定类型物体的位置&#xff0c;并标注其类别。 简单来说&#xff0c;就是让计算机像人类一样 “看懂” 图像内容&#xff0c;不仅能识别出物体&#xff08;如人、…

unix/linux source 命令,其内部结构机制

要理解 source (或 .) 命令的内部结构机制,我们需要戴上“操作系统”和“解释器设计”的眼镜,深入到 Shell 如何管理其状态以及如何执行命令的层面。 虽然我们无法直接看到 Shell 内部的 C 代码(除非我们去阅读 Bash 或 Zsh 的源码),但我们可以基于其行为和操作系统的原理…

计算机网络学习20250528

地址解析协议ARP 实现IP地址和Mac地址的转换 ARP工作原理&#xff1a; 每台主机或路由器都有一个ARP表&#xff0c;表项&#xff1a;<IP地址&#xff0c;Mac地址&#xff0c;TTL>&#xff08;TTL一般为20分钟&#xff09; 主机产生ARP查询分组&#xff0c;包含源目的IP地…

【Rust】Rust获取命令行参数以及IO操作

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

微服务中引入公共拦截器

本文使用的微服务版本为springcloudAlbaba :2021.0.4.0 微服务工程&#xff0c;一般公共的东西都放入一个工程&#xff0c;别的微服务都会引入这个工程&#xff0c;比如common-service,那么就可以在这个工程编写一个拦截器&#xff1a;&#xff0c;比如&#xff1a; public cla…

Linux SLES 系统的/var/log/下的常见文件及其作用

在 SUSE Linux Enterprise Server&#xff08;SLES&#xff09; 系统中&#xff0c;/var/log/ 目录是系统日志的集中地&#xff0c;存储了各种服务、内核、系统消息的日志。以下是一些在 /var/log/ 下常见的日志文件及其功能&#xff1a; &#x1f4c2; 常见日志文件及功能 文…

oracle goldengate同步SQL server到SQL server的实时数据同步

参考文档 https://docs.oracle.com/en/middleware/goldengate/core/19.1/oggmp/oracle-goldengate-classic-sql-server.html#GUID-948C5BEE-E7A0-4CE2-BE09-F83145677D18 https://docs.oracle.com/en/middleware/goldengate/core/21.3/ggcab/other-programs-and-settings-sql-…

语音转文字工具

平时工作和学习比较忙&#xff0c;可能没时间听讲座&#xff0c;只能看回放&#xff0c;回访也很长&#xff0c;这时&#xff0c;我们可以借助语言转文字&#xff0c;通过阅读文字快速了解讲座的重点&#xff0c;今天给大家分享一个本人经常用的语言转文字工具&#xff0c;改工…

硬件实时时钟(RTC)

硬件实时时钟&#xff08;RTC&#xff09;详解 硬件实时时钟&#xff08;Real-Time Clock&#xff0c;RTC&#xff09;是计算机主板上的一个独立计时芯片&#xff0c;用于在系统关机后持续记录时间。它不依赖操作系统&#xff0c;由纽扣电池&#xff08;如CR2032&#xff09;供…

pycharm debug的时候无法debug到指定的位置就停住不动了

报错大致是这样的&#xff0c;但是直接run没有问题&#xff0c;debug就停住不动了 Traceback (most recent call last): File "/home/mapengsen/.pycharm_helpers/pydev/_pydevd_bundle/pydevd_comm.py", line 467, in start_client s.connect((host, port)) Timeou…

Python6.1打卡(day33)

DAY 33 MLP神经网络的训练 知识点回顾&#xff1a; 1.PyTorch和cuda的安装 2.查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09; 3.cuda的检查 4.简单神经网络的流程 1.数据预处理&#xff08;归一化、转换成张量&#xff09; 2.模型的定义 …

NodeJS全栈开发面试题讲解——P11消息队列(MQ)

✅ 11.1 为什么要用消息队列&#xff1f;在哪些场景下最适合&#xff1f; ✅ 作用&#xff1a; 削峰填谷&#xff1a;缓解高并发压力&#xff0c;异步处理任务&#xff08;如秒杀下单 → MQ → 异步扣库存&#xff09; 解耦服务&#xff1a;上下游解耦&#xff08;如下单服务…

mysql执行sql语句报错事务锁住

报错情况 1205 - Lock wait timeout exceeded; try restarting transaction先找出长时间运行的事务 SELECT * FROM information_schema.INNODB_TRX ORDER BY trx_started ASC;终止长时间运行的事务 KILL [PROCESS_ID];

C#集合循环删除某些行

你想要在遍历集合&#xff08;例如List&#xff09;的同时删除某些元素时&#xff0c;直接在循环中删除元素可能会导致问题&#xff0c;因为这可能会改变集合的大小和导致索引问题&#xff1b; 可以用for循环的倒序来删除&#xff1b; 如果要删除满足特定条件的所有元素&…

裂缝仪在线监测装置:工程安全领域的“实时守卫者”

在基础设施运维领域&#xff0c;裂缝扩展是威胁建筑结构安全的核心隐患之一。传统人工巡检方式存在效率低、时效性差、数据主观性强等局限&#xff0c;而裂缝仪在线监测装置通过技术迭代&#xff0c;实现了对结构裂缝的自动化、持续性追踪&#xff0c;为工程安全评估提供科学依…

Multisim14使用教程详尽版--(2025最新版)

一、Multisim14前言 1.1、主流电路仿真软件 1. Multisim:NI开发的SPICE标准仿真工具,支持模拟/数字电路混合仿真,内置丰富的元件库和虚拟仪器(示波器、频谱仪等),适合教学和竞赛设计。官网:艾默生旗下测试和测量系统 - NI。 2. LTspice XVII:ADI旗下免费高性能SPICE仿…

深度学习篇---人脸识别中的face-recognition库和深度学习

深度学习方法和使用 Python 的face_recognition库进行人脸识别在技术原理、实现方式和应用场景上有显著区别&#xff0c;以下从多个维度对比分析&#xff1a; 一、技术原理 1. 深度学习方法 核心逻辑&#xff1a;基于神经网络&#xff08;如卷积神经网络 CNN&#xff09;构建…

Go语言中的数据类型转换

Go 语言中只有强制类型转换&#xff0c;没有隐式类型转换。 1. 数值类型之间的相互转换 1.1. 整型和整型之间的转换 package main import "fmt"func main() {var a int8 20var b int16 40fmt.Println(int16(a) b)// 60 }1.2. 浮点型和浮点型之间的转换 packag…