任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。

比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。

请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。

循环圈的输出格式仿照:

[82962, 75933, 63954, 61974]

其中数字的先后顺序可以不考虑。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet; public class Main {
public static HashSet<ArrayList<Integer>> set = new HashSet<ArrayList<Integer>>();
public static int start; public String getMax(int n) {
StringBuffer s = new StringBuffer("");
String temp = "" + n;
if(temp.length() < 5) {
while(temp.length() < 5) {
temp = "0" + temp;
}
}
char[] arrayN = temp.toCharArray();
Arrays.sort(arrayN);
for(int i = arrayN.length - 1;i >= 0;i--)
s.append(arrayN[i]);
return s.toString();
} public String getMin(int n) {
String temp = getMax(n);
StringBuffer s = new StringBuffer(temp);
return s.reverse().toString();
} public int getResult(int n) {
int max = Integer.valueOf(getMax(n));
int min = Integer.valueOf(getMin(n));
return max - min;
} public static void main(String[] args) {
Main test = new Main();
for(int i = 10000;i < 100000;i++) {
if(i % 11111 == 0)
continue;
ArrayList<Integer> list = new ArrayList<Integer>();
int a = i;
while(true) {
a = test.getResult(a);
if(!list.contains(a))
list.add(a);
else
break;
}
start = list.indexOf(a);
ArrayList<Integer> temp = new ArrayList<Integer>();
for(int j = start;j < list.size();j++)
temp.add(list.get(j));
Collections.sort(temp);
set.add(temp);
}
for(ArrayList<Integer> list : set)
System.out.println(list);
}
}

Java实现 黑洞数的更多相关文章

  1. Java中的数是用补码表示的检验

    一.基本介绍(关于下列五个定义来自http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html#!comments,谢原 ...

  2. 18.12.09-C语言练习:黑洞数 / Kaprekar问题

    题目: 程序: #include <stdio.h> int main(void) { int n, a, b, c, t, A, B; printf("输入一个三位数整数:&q ...

  3. 【Java】PS-查看Java进程-线程数

    PS-查看Java进程-线程数 ps 线程 个数_百度搜索 查看进程的线程数命令 - CSDN博客 java命令行运行jar里的main类 - coderland - 博客园

  4. JAVA把毫秒数转换成日期

    JAVA把毫秒数转换成日期 systemMillonSenconds = System.currentTimeMillis();   2012-08-17 14:42 1456人阅读 评论(1) 收藏 ...

  5. java代码行数统计工具类

    package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...

  6. 黑洞数--python

    黑洞数:黑洞数又称陷阱数,是类具有奇特转换特性的整数.任何一个数字不全相同整数,经有限“重排求差”操作,总会得某一个或一些数,这些数即为黑洞数.“重排求差”操作即把组成该数的数字重排后得到的最大数减去 ...

  7. 算法笔记_217:黑洞数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456.求这两个数字的差,得:41 ...

  8. Java中唯一数的生成

    唯一数的生成很简单,基本上以时间为基础进行生成.在JDK里面已经有java.util.UUID类可以生成唯一的随机数.如果希望生成的唯一数为特定的格式,那么就需要自己来生成唯一数了.生成唯一数时有两个 ...

  9. 统计文件夹下java代码行数的小程序--主要是学习任务队列的思想

    首先感谢czbk的老师,录制的视频,让我们有这么好的学习资料.……—— 统计文件夹java文件的行数,首先想到的肯定是用递归的方法,因为文件夹下面可能包含文件夹,用递归的方法,代码容易写.(这和写简单 ...

随机推荐

  1. SpringBoot基础实战系列(二)springboot解析json与HttpMessageConverter

    SpringBoot解析Json格式数据 @ResponseBody 注:该注解表示前端请求后端controller,后端响应请求返回 json 格式数据前端,实质就是将java对象序列化 1.创建C ...

  2. 存储过程——公用表表达式(CTE)

    目录 0. 背景说明 1. 定义及语法细节 1.1 基本定义 1.2 基本语法 1.3 多个CTE同时声明 1.4 CTE嵌套使用 2. CTE递归查询 2.1 简介 2.2 准备工作 2.3 计算每 ...

  3. Netty 中的粘包和拆包

    Netty 底层是基于 TCP 协议来处理网络数据传输.我们知道 TCP 协议是面向字节流的协议,数据像流水一样在网络中传输那何来 "包" 的概念呢? TCP是四层协议不负责数据逻 ...

  4. 用JetBrains PyCharm 开发工具写一个简单python案例

    import urllib.request import re #解析html的内容 def getHtml(url): page=urllib.request.urlopen(url) html=p ...

  5. strut2登陆注册验证码

    1. 生成图片和验证码 package com.jmu.code; import java.awt.Color; import java.awt.Font; import java.awt.Graph ...

  6. Java并发包4--可重入锁ReentrantLock的实现原理

    前言 ReentrantLock是JUC提供的可重入锁的实现,用法上几乎等同于Synchronized,但是ReentrantLock在功能的丰富性上要比Synchronized要强大. 一.Reen ...

  7. JDK安装与配置环境变量

    1.JDK的安装 (1).为什么安装jdk? JDK是java软件开发包的简称,要想开发java程序就必须安装JDK.没有JDK的话,无法编译Java程序. (2).开始安装jdk 1.官网下载jdk ...

  8. 【Java_Eclipse】Eclipse插件如何卸载?

    本博客我们讲一下对于Eclipse的插件卸载 1.Eclipse中:Window——Install  New  SoftWare 2.找到相应插件卸载即可

  9. 三、HTML元素

    嵌套的HTML元素 <!--以下实例包含了三个HTML元素,分别是<html>.<body>.<p>--> <!DOCTYPE html> ...

  10. ASP.NET Core on K8S学习之旅(14)Ingress灰度发布

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 之前一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和 ...