Python笔记 | 卡布列克常数

news2024/11/14 11:02:13

0x00 前言

        任意一个不是由完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个较大的数和一个较小的数,然后用较大数减去较小数,差不够四位数时补零,类推下去,最后将变成一个固定的数:6174,这就是卡布列克常数。

        

        

0x01 问题分析

关于卡布列克常数给出以下示例:

9876-6789=3087
8730-0378=8352
8532-2358=6174

        从给出的示例可见,卡布列克常数就是任意一个由不是完全相同的数字组成的四位数,然后将组成的最大值减去最小值,不断重复后,得到的数都是一个固定的数:6174。

        

        

0x02 代码设计

def ad_define(n):
    ad = [0] * 4    #ad-Array Data
    ad[0] = n // 1000
    ad[1] = (n % 1000) // 100
    ad[2] = ((n % 1000) % 100) // 10
    ad[3] = ((n % 1000) % 100) % 10
    return ad

        代码解析:使用 def 声明一个函数 ad_define(n) ,参数 n 为用户输入的数据,定义变量 ad 用来保存四位整数上的每位数,ad 表示数组数据的简写,ad[0] 数组用来保存千位上的数,ad[1] 数组用来保存百位上的数,ad[2] 数组用来保存十位上的数,ad[3] 数组用来保存个位上的数,最后使用 return() 函数返回。

        

def ad_max(ad):
    for i in range(0, len(ad) - 1):
        for j in range(0, len(ad) - 1 - i):
            if ad[j] <= ad[j + 1]:
                ad[j], ad[j + 1] = ad[j + 1], ad[j]
    max = "".join(list(map(lambda x: str(x), ad)))
    max = int(max)
    return max    #max 最大值

        代码解析:使用 def 声明一个函数 data_max 求出卡布列克常数的最大值,算法使用冒泡排序排序出这组数据的最大值。因为后续减法必须采用整数形式计算,所以需要给 max 变量的数组类型转换为字符串类型,这里使用 lambda() 函数将参数 ad 设置为字符串形式。 map() 函数用作映射,代码中的 join 方法主要用于字符串的拼接,最后使用 return 函数返回到 max 中。注意,一个函数需要使用 return 返回值才算有效,否则函数无效。

        

def ad_min(ad):
    for i in range(0, len(ad) - 1):
        for j in range(0, len(ad) - 1 - i):
            if ad[j] >= ad[j + 1]:
                ad[j], ad[j + 1] = ad[j + 1], ad[j]
    min = "".join(list(map(lambda x: str(x), ad)))
    min = int(min)
    return min    #min最小值

        代码解析:使用 def 声明一个函数 data_min 求出卡布列克常数的最小值,算法使用冒泡排序排序出这组数据的最小值。因为后续减法必须采用整数形式计算,所以需要给 min 变量的数组类型转换为字符串类型,这里使用 lambda() 函数将参数 ad 设置为字符串形式。 map() 函数用作映射,代码中的 join 方法主要用于字符串的拼接,最后使用 return 函数返回到 min 中。注意,一个函数需要使用 return 返回值才算有效,否则函数无效。

        

def kblk(n, count):
    if n != 6174 and n != 0:
        ad = ad_define(n)
        max = ad_max(ad)
        min = ad_min(ad)
        num = max - min
        count += 1
        print(f'{count}:{max}-{min}={num}')
        kblk(num, count)

        代码解析:定义一个 kblk() 函数,使用 if 判断语句判断变量 n 中的数据,如果变量 n 不等于 6174 和 0 ,那么则执行一次卡布列克常数的计算。使用 ad_define(n) 函数将处理好的数据存储到变量 ad 中,注意此时数据类型为数组类型,接着将处理好的数据发送给 ad_max() 函数用来计算数据的最大值,将处理好的数据发送给 ad_min() 函数用来计算数据的最小值。将最大值减去最小值则完成一次卡布列克常数的计算,将数据保存在变量 num 中。使用 count += 1 为变量 count 记录这次卡布列克常数的计算。然后使用 print() 函数打印出这一次卡布列克常数的计算。最后在将计算后的数据保存在 kblk() 函数中。

        

def main():
    n = int(input("输入一个4位整数:"))
    count = 0    #计数
    while n >= 1000 and n <= 9998:
        kblk(n, count)    #kblk-卡布列克
        break
main()

        代码解析:定义一个 main() 函数,用于执行验证卡布列克常数的代码。获取用户的输入,提示用户输入内容必须为一个 4 位数的整数,使用 int() 整数形式的方法保留数据到变量 n 中。定义一个变量 count ,并设置初始值 0 作为卡布列克常数计算执行步骤的计数。使用一个 while 循环判断用户输入的这个数,如果这个数大于等于 1000 和 小于等于 9998 ,那么执行函数 kblk() 并用 break 语句跳出循环。最后使用 main() 函数执行。

        

        

0x03 代码流程

代码运行流程图

        

        

0x04 完整代码

def ad_define(n):
    ad = [0] * 4
    ad[0] = n // 1000
    ad[1] = (n % 1000) // 100
    ad[2] = ((n % 1000) % 100) // 10
    ad[3] = ((n % 1000) % 100) % 10
    return ad

def ad_max(ad):
    for i in range(0, len(ad) - 1):
        for j in range(0, len(ad) - 1 - i):
            if ad[j] <= ad[j + 1]:
                ad[j], ad[j + 1] = ad[j + 1], ad[j]
    max = "".join(list(map(lambda x: str(x), ad)))
    max = int(max)
    return max

def ad_min(ad):
    for i in range(0, len(ad) - 1):
        for j in range(0, len(ad) - 1 - i):
            if ad[j] >= ad[j + 1]:
                ad[j], ad[j + 1] = ad[j + 1], ad[j]
    min = "".join(list(map(lambda x: str(x), ad)))
    min = int(min)
    return min

def kblk(n, count):
    if n != 6174 and n != 0:
        ad = ad_define(n)
        max = ad_max(ad)
        min = ad_min(ad)
        num = max - min
        count += 1
        print(f'{count}:{max}-{min}={num}')
        kblk(num, count)

if __name__ == "__main__":
    n = int(input("输入一个4位整数:"))
    count = 0
    while n >= 1000 and n <= 9998:
        kblk(n, count)
        break

        

        

0x05 运行效果

请输入一个4位整数:9876
1:9876-6789=3087
2:8730-378=8352
3:8532-2358=6174

Process finished with exit code 0

        

        

0x06 参考文献

[1].百度百科. 卡布列克常数[EB/OL]. [2022-12-28]. https://baike.baidu.com/item/%E5%8D%A1%E5%B8%83%E5%88%97%E5%85%8B%E5%B8%B8%E6%95%B0/3177243.

[2].刘河飞. 趣学Python算法100例[M]. 机械工业出版社, 2020.

        

        

0x07 总结

文章内容为学习记录的笔记,由于作者水平有限,文中若有错误与不足欢迎留言,便于及时更正。

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

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

相关文章

使用kubeadm安装kubernetes记录

1.查看版本信息 # 在 master 节点和 worker 节点都要执行 cat /etc/redhat-release# 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字 # 不能使用 localhost 作为节点的名字 hostname# 请使用 lscpu 命令&#xff0c;核对 CPU 信息 # Architecture: x86_64 …

C语言指针全解

C语言指针全解指针的定义指针的大小指针类型指针类型意义野指针二级指针字符指针指针数组数组指针&数组名 VS 数组名应用数组参数、指针参数函数指针函数指针数组函数指针数组的使用 - 模拟计算器指向函数指针数组的指针回调函数回调函数的使用 - qsort函数指针的定义 在计…

澳亚集团在港交所上市:IPO首日破发,毛利率走低,盈利能力下滑

12月30日&#xff0c;澳亚集团有限公司&#xff08;下称“澳亚集团”&#xff0c;HK:02425&#xff09;在港交所上市。本次上市&#xff0c;澳亚集团的发行价为6.40港元/股&#xff0c;发行数量为3064万股&#xff0c;募资总额约为1.96亿港元&#xff0c;募资净额约为1.01亿港元…

DoIP协议从入门到精通——DoIP企业规范常见疑问解答

基于自己在做DoIP测试过程中遇到的一些让自己困惑的点,汇总后与你分享,期望有所帮助。 具体内容如下: 1、IP地址 背景信息: 在通常Tester与车辆进行诊断通信时,Tester端设置好自己的IP地址信息,而对于待测ECU IP地址信息通常不设置,或者说不知道怎么设置。 穿拖鞋的…

ext4 extent详解1之示意图演示

本文将从内核源码、实例演示等角度详细ext4 extent B树的前世今生&#xff0c;希望看过本文的读者从理解ext4 extent的工作原理。内核版本3.10.96&#xff0c;详细内核详细源码注释见GitHub - dongzhiyan-stack/kernel-code-comment: 3.10.96 内核源代码注释。 1 ext4 extent由…

题库自定义配置,满足各种使用习惯,专治强迫症

目录 自定义题型 自定义选项 章节、难度增加排序属性 下一个版本预告 根据吐槽社区的反馈情况&#xff0c;没想到居然有台湾同胞使用土著刷题微信小程序&#xff0c;鉴于与内地的试题题目有所不同&#xff0c;所以土著刷题微信小程序v1.9主要迭代了题库自定义相关配置。 自…

架构师课程笔记day03——单体应用开发过程中常用知识点及注意事项

1.自定义异常捕获处理 定义如下类 可捕获并处理相关异常 package com.imooc.exception;import com.imooc.utils.IMOOCJSONResult; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;…

第十二篇 1+X考证 Web前端测试题PHP篇(新)

单选题 1、以下关于PHP面向对象的说法错误的是&#xff08; A &#xff09; A、PHP可以多重继承&#xff0c;一个类可以继承多个父类 B、PHP使用new运算符来获取一个实例对象 C、一个类可以在声明中用extends关键字继承另一个类的方法和属性 D、PHP默认将var关键字解释为pu…

数据源支持

数据源支持目录概述需求&#xff1a;设计思路实现思路分析1.AT模式2.TCC模式3.Saga模式4.XA模式参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for ch…

【ROS】—— ROS快速上手

文章目录前言1. ROS-melodic 安装2. ROS基本操作2.1 创建工作空间2.2 创建功能包2.3 HelloWorld(C版)2.4 HelloWorld(Python版)3. Vscode ROS 插件4. vscode 使用基本配置4.1 启动 vscode4.2 vscode 中编译 ros5. launch文件演示6. ROS文件系统7. ROS文件系统相关命令前言 &…

沸腾过程气泡成核OVITO渲染

《Lammps空间划分——识别气泡、三维裂隙》 根据博文对纳米气泡的筛选&#xff08;获得select&#xff09;&#xff0c;本案例练习如何渲染气泡。 文章目录一、选择气泡&#xff08;select&#xff09;二、删除液体三、渲染液体四、巧妙利用原子半径大小五、气泡渲染并获得体积…

elasticsearch 7.9.3知识归纳整理(一)之es,kibana,ik的下载安装

es&#xff0c;kibana&#xff0c;ik的下载安装 下载地址 es下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch kibana下载地址&#xff1a; https://www.elastic.co/cn/downloads/kibana ik中文分词器下载地址&#xff1a;https://github.com/medcl/el…

我的周刊(第072期)

我的信息周刊&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。&#x1f3af; 项目duplicati[1]Duplicati 是一个免费的开源备份客户端…

力扣(LeetCode)364. 加权嵌套序列和 II(2022.12.31)

给你一个整数嵌套列表 nestedList &#xff0c;每一个元素要么是一个整数&#xff0c;要么是一个列表&#xff08;这个列表中的每个元素也同样是整数或列表&#xff09;。 整数的 深度 取决于它位于多少个列表内部。例如&#xff0c;嵌套列表 [1,[2,2],[[3],2],1] 的每个整数的…

回归原型网络代码episode数据加载

一般PyTorchPyTorchPyTorch加载数据的固定格式是: dataset MyDataset() : 构建DatasetDatasetDataset对象 dataLoader DataLoader(dataset) #通过DataLoaderDataLoaderDataLoader来构造迭代对象. num_epoches 100 for epoch in range(num_epoches): #逐步迭代数据 for img,l…

元宇宙产业委评选2022全球元宇宙十大事件(含国外元宇宙五大事件)

中国移动通信联合会元宇宙产业工作委员会&#xff08;简称为&#xff1a;元宇宙产业委&#xff09; 评选2022全球元宇宙十大事件&#xff08;含国外元宇宙五大事件&#xff09; 1、1月5日&#xff0c;CES 2022上&#xff0c;英伟达&#xff08;NVIDIA&#xff09;宣布旗下元宇…

【django】HttpRequest对象的属性和路由补充

文章目录一、HttpRequest对象的常用属性1、request.GET&#xff1a;获取查询字符串参数案例:特别注意&#xff1a;2、request.POST&#xff1a;post请求数据&#xff0c;只能获取表单参数3、request.body&#xff1a;请求body&#xff0c;响应结果为字节类型4、request.method&…

一文搞懂G1垃圾回收器

G1是从JDK9之后的默认垃圾回收器&#xff0c;其功能强大&#xff0c;性能优异&#xff0c;不过目前市面的材料不算多&#xff0c;很多都是抄来抄去&#xff0c;讲得也不太清楚。经过仔细阅读oracle官网以及相关的材料&#xff0c;从整体上梳理了G1的过程&#xff0c;希望这一文…

数据库设计规范详解

对于后端开发人员&#xff0c;建表是个基础活&#xff0c;是地基&#xff0c;如果地基不大牢固&#xff0c;后面在程序开发过程中会带来很多麻烦&#xff0c;在建表的时候不注意细节&#xff0c;等后面系统上线之后&#xff0c;表的维护成本变得非常高&#xff0c;而且很容易踩…

基数排序分析

&#x1f954; 原理介绍&#xff1a; [排序算法] 基数排序 (C) - Amαdeus - 博客园 前述的各类排序方法都是建立在关键字比较的基础上&#xff0c;而基数排序是一种非比较型整数排序算法。它的基本思想是将整数按位数切割成不同的数字&#xff0c;然后按每个位数分别比较。 …