趣味数学编程——神奇的数字黑洞

趣味数学编程——神奇的数字黑洞什么是数字黑洞黑洞原是天文学中的概念 表示这样一种天体 它的引力场是如此之强 就连光也不能逃脱出来 数字黑洞 又称指的是某种运算方式 这种运算一般限定从某些整数出发 反复迭代后结果必然落入一个点或若干点的情况叫数字黑洞

大家好,欢迎来到IT知识分享网。

什么是数字黑洞

黑洞原是天文学中的概念,表示这样一种天体:它的引力场是如此之强,就连光也不能逃脱出来。

趣味数学编程——神奇的数字黑洞

数字黑洞,又称指的是某种运算方式,这种运算一般限定从某些整数出发,反复迭代后结果必然落入一个点或若干点的情况叫数字黑洞。在运算过程中,任何数字都无他“逃脱”命运一般,都将收敛到一个数字黑洞,其过程就像黑洞一样。

数字黑洞的种类还不止一种,有些是把数字重新排列,有一些是经过某种计算,下面介绍两种数字黑洞,并且用程序来实现演算过程。

西绪福斯黑洞(123数字黑洞)

数学中的123就跟英语中的ABC一样平凡和简单。然而,按以下运算顺序,就可以观察到这个最简单的数字。
设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,
例如:

  1. 偶:数出该数字中的偶数个数,在本例中为24680,总共有 5 个。
  2. 奇:数出该数字中的奇数个数,在本例中为13579,总共有 5 个。
  3. 总:数出该数字的总个数,本例中为 10 个。
  4. 新数:将上述结果按 “偶-奇-总” 的位序,排列出得到新数为:5510
  5. 重复:将新数5510按以上算法重复运算,可得到新数:134
  6. 重复:将新数134按以上算法重复运算,可得到新数:123

结论:对数,按上述算法,最后必得出123的结果,我们可以用计算机写出程序,测试出对任意一个数经有限次重复后都会是123。换言之,任何数的最终结果都无法逃逸123黑洞……

编程实现转换过程

我们写一个程序来观察转换过程和所需的转换次数

# 因为要逐个统计每一位数字,我们直接用字符串的方式来处理 number = input('请输入任意数字:') def trans_num(num): odd_nums = 0 even_nums = 0 zero = ord('0') for n in number: # 计算ASICC码字符的距离来判断奇数和偶数 distance = ord(n) - zero if distance % 2 == 0: even_nums += 1 else: odd_nums += 1 # 将统计结果拼接成新的数字 return f'{even_nums}{odd_nums}{even_nums+odd_nums}' # 循环转换数字 while True: trans_result = trans_num(number) # 转换前后数字相等,表示已经达到黑洞数字,退出循环 if trans_result == number: break number = trans_result print(f'转换后的结果:{number}') 

运行结果

请输入任意数字: 转换后的结果:6511 转换后的结果:134 转换后的结果:123 

从结果上看,对输入的值,转换4次到了黑洞数字123,而且123无论多少次转换,结果都是123


卡普雷卡尔黑洞(重排求差黑洞)

卡普雷卡尔黑洞是指将一个多位数重新排列形成的最大数和最小数之间的差作为新的数字,然后重复这个过程,直到达到一个稳定的数字,即无法再进行重排得到不同的数字

四位数黑洞6174
把一个四位数的四个数字由小至大排列,组成一个新数,又由大至小排列排列组成一个新数,这两个数相减,之后重复(最多重复7次)这个步骤,只要四位数的四个数字不重复(排除四个数字都相等的情况),数字最终便会变成 6174。
例如: 四位数字6767,按照上面描述重新排列和计算过程如下:
7766−6677=−6677=1089
9810−0189=−0189=9621
9621−1269=−1269=8352
8532−2358=−2358=6174
6741−1467=−1467=6174
经过四次计算后,出现了特定的数字6174,该数字再重复计算,结果还是6174

三位数也有一个数字黑洞——495

例如: 四位数字918,按照上面描述重新排列和计算过程如下:
981−189=−189=792
972−279=−279=693
963−369=−369=594
954−459=−459=495
954−459=−459=495
经过四次计算后,出现了特定的数字495,该数字再重复计算,结果还是495

实现程序判断是否符合卡普雷卡尔黑洞

''' 卡普雷卡尔黑洞运算过程函数 ''' def kaprekar_black_hole(num): # 将num每一位进行排序(升序) asc_sorted_num = ''.join(sorted(num)) # 转换为降序 desc_sorted_num = asc_sorted_num[::-1] difference = int(desc_sorted_num) - int(asc_sorted_num) print(f'{desc_sorted_num}-{asc_sorted_num} = {difference}') if difference == 495 or difference == 6174: return kaprekar_black_hole(str(difference)) number = input('请输入任意三位数或者四位数:') kaprekar_black_hole(number) 

运行结果:

请输入任意三位数或者四位数:819 981-189 = 792 972-279 = 693 963-369 = 594 954-459 = 495 

结语

数学,这个看似严肃、抽象的学科,其实充满了趣味性和探索性。就像我们在本文中探讨的数字黑洞一样,这些看似简单的数字运算,却隐藏着深奥的规律和无尽的乐趣。这就是数学的魅力所在,它让我们能够发现并理解这个世界的秩序和规律。

同时,编程作为一种强大的工具,能够帮助我们更好地探索和理解数学。通过编程,我们可以快速、准确地进行复杂的计算,模拟各种数学问题,甚至发现新的数学规律。正如我们在本文中所做的那样,通过编程,我们能够直观地展示数字黑洞的形成过程,让抽象的数学问题变得生动和直观。

因此,数学和编程是相辅相成的。数学提供了理论和方法,帮助我们理解和解决问题;而编程则提供了实践的平台,让我们能够将理论应用到实际问题中,得到直观和深入的理解。这就是数学和编程结合的重要性。

希望这篇文章能够帮助你理解数字黑洞的奇妙之处,感受数学的趣味性,以及数学和编程结合的重要性。祝你在数学和编程的世界中探索得愉快!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/96895.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信