一,问题描述

所谓“数字黑洞”现象,就是任意给定一个4位正整数,将组成该正整数的4个数字先按非递减顺序排序,得到一个数称为Large;再将这4个数字按非递增顺序排序,得到另一个数,称为Small。然后,将Large减去Small,得到一个新的数字。当然,其它位数的也存在着这个现象,具体可参考:数字黑洞

将这个新的数字重复上面的处理,很快就会停在有“数字黑洞”之称的 6174 这个数上。这个数也称为Kaprekar常数。

二,举例说明

比如,输入6767,其演示结果如下:

7766 - 6677 = 1089

9810 - 0189 = 9621  ----将新得到的数 1089 进行非递减及 非递增排序后,分别得到 9810 和 0189(189)

9621 - 1269 = 8352

8532 - 2358 = 6174

三,核心思路分析

这个问题的核心过程是:将数字分解成各个位,然后按非递增或非递减排序,再得到排序后的数字。

数字分解的话,可以用求余 和 除法。排序的话,可以用Arrays.sort(int[] arr)。得到排序后的数字,其实就是Horner法则。

①数字分解:

privatestatic int[] split(intn){

//assert n >= 1000; assert n <= 9999int[] arr = new int[4];int index = 0;while(n != 0)

{

arr[index++] = n % 10;

n= n / 10;

}returnarr;

}

②Horner法则得到数字:关于Horner法则可参考:求幂运算、多项式乘法及Horner法则的应用

//1089-->9810, arr是从小到大的有序数组

privatestatic int toLarge(int[] arr){int result = 0;for(int i = arr.length - 1; i >=0; i--)

{

result= result*10 +arr[i];

}returnresult;

}//1089 --> 189arr是从小到大的有序数组

privatestatic int toSmall(int[] arr){int result = 0;for(int i = 0; i < arr.length; i++)

{

result= result*10 +arr[i];

}returnresult;

}

四,整个代码完整实现:

importjava.util.Arrays;importjava.util.Scanner;public classMain {public static voidmain(String[] args) {

Scanner in= newScanner(System.in);while (in.hasNextInt()) {//注意while处理多个case

int number =in.nextInt();int[] arr =split(number);if(check(arr))

{

System.out.println(number+ " - " + number + " = " + "0000");

}else{int res =process(number);while(res != 6174)

{

res=process(res);

}

}

}

}public static int[] split(intn){int[] arr = new int[4];int index = 0;while(n != 0)

{

arr[index++] = n % 10;

n= n / 10;

}returnarr;

}public static void sort(int[] arr){

Arrays.sort(arr);

}public static int toLarge(int[] arr){int result = 0;for(int i = arr.length - 1; i >=0; i--)

{

result= result*10 +arr[i];

}returnresult;

}public static int toSmall(int[] arr){int result = 0;for(int i = 0; i < arr.length; i++)

{

result= result*10 +arr[i];

}returnresult;

}public static int process(intn){int[] arr =split(n);

Arrays.sort(arr);int large =toLarge(arr);int small =toSmall(arr);

print(large, small, arr);return large -small;

}public static void print(int large, int small, int[] arr){

System.out.println(large+ " - " + arr[0] + arr[1] + arr[2] + arr[3] + " = " + (large -small));

}public static boolean check(int[] arr){int tmp = arr[0];for(int i = 1; i < arr.length; i++)if(arr[i] !=tmp)return false;return true;

}

}

View Code

python数字黑洞123_演示数字黑洞现象相关推荐

  1. 数字黑洞java_Java中数字黑洞实现代码

    给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有"数字黑洞&qu ...

  2. 宇宙有黑洞,信息数字黑洞

    工业互联网.5G+智能化.云平台等如雨后春笋般接踵而至,大数据时代数字黑洞是指那些无法有效处理和利用的大量数据,它们像黑洞一样,吞噬着有价值的信息,同时对数据分析和决策带来了巨大的困难. 假设某家电商 ...

  3. 西绪福斯黑洞(123数字黑洞)——java实现

    西绪福斯黑洞(123数字黑洞) 数学中的123就跟英语中的ABC一样平凡和简单.然而,按以下运算顺序,就可以观察到这个最简单的数字 黑洞的值: 设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及 ...

  4. 【Python学习笔记】1:黑洞数和啤酒问题

    这学期刚开始接触python,觉得python的确很强大,特别是在序列的处理上.虽然以后未必会用得上太多,还是要好好学一下.基于已经有了编程语言基础,python的学习还是以边做题边学习语法较好,毕竟 ...

  5. 如何检查一个Python字符串是否只包含数字?

    如何检查一个Python字符串是否只包含数字? python String类中有一个名为isdigit()的方法,如果字符串中所有字符都是数字且至少有一个字符,则返回true,否则返回false. p ...

  6. Python基础(10)--数字

    本文的主题是 Python 中的数字.会详细介绍每一种数字类型,它们适用的各种运算符, 以及用于处理数字的内建函数.在文章的末尾, 简单介绍了几个标准库中用于处理数字的模块. 本文地址:http:// ...

  7. python单目运算_Python -- 数字

    Python 支持多种数字类型:整型.长整型.布尔型.双精度浮点型.十进制浮点型和复数. Python的几种主要数字类型 Python 有几种整数类型.布尔类型是只有两个值的整型.常规整型是绝大多数现 ...

  8. python 从字符串中提取数字 re.findall()

    以前老用(.*?)提取数字,今天发现不对了,比如一行数字为: 0 0.248438 0.255556 0.128125 0.194444 用: re.findall('(.*?) (.*?) (.*? ...

  9. python 如何将字符串数字列表转换成数字列表,如何将数字列表转换成字符串数字列表?map(eval,list(str))

    字符串数字列表转换成数字列表 # -*- encoding: utf-8 -*- """ @File : test.py @Time : 2019/10/28 23:37 ...

  10. python传参怎么校验数字_python 多个参数不为空校验方法

    python 多个参数不为空校验方法 在实际开发中经常需要对前端传递的多个参数进行不为空校验,可以使用python提供的all()函数 if not all([arg1, arg2, arg3]): ...

最新文章

  1. mysql 最小时间 最大时间_leetcode539_go_最小时间差
  2. 让IE6、IE7、IE8支持CSS3的圆角、阴影样式
  3. 奥斯陆大学计算机,奥斯陆大学雅思要求
  4. 蓝桥杯2017初赛-正则问题
  5. linux mint python3.6,Linux 上如何安装并切换最新版本的 Python 3.6
  6. 一级域名301重定向到www二级域名
  7. vs2019安装rdlc_科学网—vs2019 完全安装到D盘 - 刘航宇的博文
  8. 微信大改版,更新前必看的4个东西
  9. 严蔚敏数据结构习题第五章
  10. 腾讯防水墙的使用(python_web)
  11. Maven到底是个啥?——Maven深入理解
  12. 中国电信上海电信光猫路由器设置和外接路由器
  13. highChart导出PDF
  14. 为什么光合作用要叶绿素?
  15. 【机器学习经典算法】K近邻(KNN):核心与总结
  16. 打印机不打印计算机原因,打印机打印不完整?是这10个原因造成的!打印必备...
  17. qq音乐会员联合会员都有哪些
  18. 用计算机的声音编辑工具录制一段语音信号,传媒2020年7月《影视录音基础》课程考试在线作业考核试题题目【标准答案】...
  19. 关于 Spfile文件误删除 或者 优化错误 恢复
  20. Acrel-BUS智能照明控制系统的设计与应用

热门文章

  1. 【科研分享】推荐系统SCI顶会及顶级期刊 更新于2022-07-13
  2. python编程输入圆柱_C语言编程:已知圆半径及圆柱高,求圆周长,圆柱体积.要求对输入输出做提示.各位大神帮帮忙,可怜可怜我吧!编写一个c语言程序,要求输入圆...
  3. 电脑CPU的最佳工作温度是多少度
  4. 模拟电子技术 项目课 多种波形发生器(方波、三角波、正弦波)
  5. Ruff Chain 将亮相新加坡WDAS 2018世界数字资产峰会
  6. Flash 第二篇 AS影片剪辑
  7. 给UILabel中的文字加删除线
  8. 《光剑文集》自渡:125首
  9. Bazel入门:编译C++项目
  10. nfs总结之生产实例