目录

1 问题描述

2 解决方案

 


1 问题描述

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

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

循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]

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


2 解决方案

 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);
}
}

运行结果:

[62964, 71973, 74943, 83952]
[53955, 59994]
[61974, 63954, 75933, 82962]

算法笔记_217:黑洞数(Java)的更多相关文章

  1. 算法笔记_018:旅行商问题(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 Johson-Trotter算法 2.2.2 基于字典序的算法   1 问题描述 何为旅行商问题?按照非专业的说法,这个问 ...

  2. 算法笔记_218:花朵数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数.例如:当N=3时,153就满足条件,因为 1^3 + 5^ ...

  3. 算法笔记_049:奇偶数排序(Java)

    目录 1 问题描述 2 解决方案 2.1 一头一尾指针往中间扫描法 2.2 一前一后两个指针同时往后扫描法   1 问题描述 给定一个整数数组,请调整 数组中数的顺序,使得所有奇数位于数组的前半部分, ...

  4. 算法笔记_019:背包问题(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 递归求解 2.2.2 非递归求解(运用异或运算) 2.3 动态规划法 1 问题描述 给定n个重量为w1,w2,w3,... ...

  5. 算法笔记_015:快速排序(Java)

    目录 1 问题描述 2 解决方案 2.1 快速排序原理简介 2.2 具体编码 1 问题描述 给定一组数据,使用快速排序得到这组数据的非降序排列. 2 解决方案 2.1 快速排序原理简介 引用自百度百科 ...

  6. 算法笔记_230:运动员分组(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 有N个人参加100米短跑比赛.跑道为8条.程序的任务是按照尽量使每组的人数相差最少的原则分组.例如:N=8时,分成1组即可.N=9时,分成2组:一组 ...

  7. 算法笔记_136:交替字符串(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 输入三个字符串s1.s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成且不改变s1和s2中各个字符原有的相对顺序. 2 解决方案 ...

  8. 算法笔记_010:插入排序(Java)

    1 问题描述 给定一组数据,使用插入排序得到这组数据的非降序排列. 2 解决方案 2.1 插入排序原理简介 引用自百度百科: 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求 ...

  9. 算法笔记_039:杨辉三角形(Java)

    目录 1 问题描述 2 解决方案 1 问题描述 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数. 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加. ...

随机推荐

  1. Java中判断String不为空的问题性能比较

    function 1: 最多人使用的一个方法, 直观, 方便, 但效率很低. function 2: 比较字符串长度, 效率高, 是我知道的最好一个方法. function 3: Java SE 6. ...

  2. spring post 图片

    @RequestMapping(value = "/post",method = RequestMethod.POST) @ResponseBody String GPost(@R ...

  3. 用SimpleAdapter来设置ListView的内容

    Mainactivit.java package com.kale.listview; import java.util.ArrayList; import java.util.HashMap; im ...

  4. 关于Spring-Data-Jpa的一些理解

    spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管 ...

  5. Python获取数字的二进制值

    目标 想要获取一个整形数字的二进制表示 bin 内置函数 看一下官方的解释 Convert an integer number to a binary string prefixed with &qu ...

  6. 指定nvm的默认版本号

    nvm alias default 8.9.4

  7. [转]MySQL导入.sql文件及常用命令

    From : http://blog.csdn.net/muziduoxi/article/details/6091202 在MySQL Qurey   Brower中直接导入*.sql脚本,是不能一 ...

  8. 以双斜杠//开头的URL的含义

    在HTML网页中,有时会发现类似于//www.studyofnet.com/news/1341.html这样的代码,那么,这种以双斜杠//开头的URL的含义是什么呢? 在WEB网页中,有时会发现类似下 ...

  9. C#基础知识整理:C#类和结构(1)

    1.结构功能特性? 实现代码?结构用struct关键字定义的,与类类似,但有本质区别.结构实质是一个值类型,它不需要对分配的.结构的特性:(1).结构作为参数传递时,是值传递.(2).结构的构造函数必 ...

  10. HTML5 File API 全介绍

    在 HTML5 File API 出现之前,前端对于文件的操作是非常有局限性的,大多需要配合后端实现.出于安全角度考虑,从本地上传文件时,代码不可能获取文件在用户本地的地址,所以纯前端不可能完成一些类 ...