Kaprekar 7641 - 1467= 6174

复制代码
package homework;

import java.util.Arrays;

import util.StringUtil;

/**
 * 
数学黑洞数6174,即卡普雷卡尔(Kaprekar)常数,
它的算法如下:
取任意一个4位数(4个数字均为同一个数的除外),
将该数的4个数字重新组合,形成可能的最大数和可能的最小数,再即将两者之间的差求出来;
对此差值重复同样过程,最后总是到达卡普雷卡尔黑洞6174,到达这个黑洞最多需要7个步骤.
例如:取1、2、3、4这4个数
大数:取这4个数字能构成的最大数,本例为4321;
小数:取这4个数字能构成的最小数,本例为:1234;
差:求出大数与小数之差,本例为:4321-1234=3087;
重复:对新数3087按以上算法求得新数为8730-0378=8352;
重复:对新数8352按以上算法求得新数为8532-2358=6174;
结论:对任何只要不是4位数字全相同的4位数,按上述算法,不超过7次激素,最终结果多无法逃出6174黑洞.
从文本框Text1中输入一个任意的数字不完全相同的四位正整数,在文本框Text2中输出掉进黑洞的步骤次数.
 *
 * Kaprekar 7641 - 1467= 6174
 *
 * @author ZengWenFeng
 * @date 2023.11.03
 * @email 117791303@qq.com
 * @mobile 13805029595
 */
public class Math_2023_11_03_Kaprekar
{

	public Math_2023_11_03_Kaprekar()
	{

	}

	public static String calc(String num)
	{
		if (num == null || num.length() != 4)
		{
			return "-1";
		}

		char[] arrChar = num.toCharArray();
		Arrays.sort(arrChar);
		System.out.println(arrChar);

		String strMin = new String(arrChar);
		System.out.println("strMin : " + strMin);
		String strMax = new StringBuilder(strMin).reverse().toString();
		System.out.println("strMax : " + strMax);

		int min = Integer.parseInt(strMin);
		int max = Integer.parseInt(strMax);
		int result = max - min;

		System.out.println(" max - min = " + strMax + " - " + strMin + " = " + result);

		if (result == 0)
		{
			return "0";
		}
		else
		{
			String strResult = Integer.toString(result);

			// 不足四位数,补前导"0"
			if (strResult.length() <= 4)
			{
				return StringUtil.getZeroStr(4 - strResult.length()) + strResult;
			}
			//
			else
			{
				return strResult;
			}
		}
	}

	public static void main(String[] args)
	{
		String num = "888823";
		System.out.println(num);

		int cnt = 0;
		while (true)
		{
			String temp = calc(num);
			cnt++;

			if (temp.equals("6174"))
			{
				calc(temp);
				break;
			}
			else if (temp.equals("0"))
			{
				System.err.println("输入值[" + num +  "]不能是4位相同数!");
				break;
			}
			else if (temp.equals("-1"))
			{
				System.err.println("输入值[" + num +  "]不是四位数!");
				break;
			}
			else
			{
				num = temp;
			}
		}

		System.out.println("cnt : " + cnt);
	}

}

2023.11.03 homework-CSDN博客

相关推荐
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题 第87题】【Mysql篇】第17题:分布式事务的实现原理?
java·数据库·分布式·mysql·面试
来杯@Java5 小时前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
卷毛的技术笔记6 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥6 小时前
匿名函数 lambda + 高阶函数
java·python·算法
東雪木6 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r6 小时前
Java调用链MCP分析工具
java·python·ai编程
噜噜噜阿鲁~7 小时前
python学习笔记 | 11.3、面向对象高级编程-多重继承
java·开发语言
春生野草7 小时前
反射、Tomcat执行
java·开发语言
_日拱一卒8 小时前
LeetCode:207课程表
java·数据结构·算法·leetcode·职场和发展
飞翔中文网8 小时前
Java学习笔记之抽象类与接口(设计思想)
java·笔记·学习