目录

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]

最新文章

  1. css初始化样式代码
  2. windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点(转)
  3. fnciton
  4. 关于URLEnCode,URLDeCode,Base64,公钥私钥
  5. codeforces 742D Arpa&#39;s weak amphitheater and Mehrdad&#39;s valuable Hoses ——(01背包变形)
  6. 开发之UI篇
  7. 时间格式转化 String2datestyle
  8. UVA 11527 Unique Snowflakes
  9. OracleDBConsoleorcl是具体管什么的服务(转)
  10. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互
  11. 如何在Oracle网站获取官方免费课程
  12. PAT-乙级-1044. 火星数字(20)
  13. java IO复习(二)
  14. Tomcat 9.0安装配置
  15. &lt; meta http-equiv = &quot;X-UA-Compatible&quot; content = &quot;IE=edge,chrome=1&quot; /&gt;的作用
  16. C++经典绘图工具EasyX
  17. Python-10行代码实现3个数据可视化
  18. Django之组件--auth组件
  19. GMA Round 1 数列求和(Hard)
  20. c#Stream学习笔记

热门文章

  1. WordPress主题开发:网站搜索
  2. WebApp分析建模的工具
  3. 算法java实现--动态规划--电路布线问题
  4. “finally block does not complete normally”的警告解决
  5. 分布式系统唯一ID生成方案汇总 转
  6. java共享锁实现原理及CountDownLatch解析
  7. 护士当家第一至七季/全集Nurse Jackie迅雷下载
  8. ios成长之每日一遍(day 8)
  9. 用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)
  10. Easyui dialog Y轴滚动条定位