`
大头K
  • 浏览: 186312 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java模拟题第十题---------数字黑洞

    博客分类:
  • java
阅读更多
任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:[82962, 75933, 63954, 61974] 这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为 [0],这个可以不考虑。循环圈的输出格式仿照:
[82962, 75933, 63954, 61974]
其中数字的先后顺序可以不考虑。
(代码其实并不算长,只是注释写多了。如果有更好的方法,望赐教。)

/**
 * @category 数字黑洞
 * @author liucanwen
 * @time 2012-1-17 20:30
 */
public class NumberBlackHole
{
	@SuppressWarnings("unchecked")
	ArrayList list = null;
	@SuppressWarnings("unchecked")
	public static void main(String[] args) throws Exception
	{
		NumberBlackHole nbh = new NumberBlackHole();
		//循环:从10000~99999的所有五位数,求出所有5位数的数字黑洞
		for(int i = 10000; i <= 99999; i++)
		{
			//当数字可以整除11111直接输出"[0]"
			if(i % 11111 == 0) 
			{
				//System.out.println("[0]");
				continue;
			}
			//调用方法getCycle()来得到数字序列list
			ArrayList list2 = nbh.getCycle(i, 0);
			
			//标志索引:数字黑洞的开始索引。
			int deleteIndex = 0;
			
			//遍历得到的list2(数字序列)
			for(int j = 0; j < list2.size(); j++)
			{
				//得到数字黑洞的开始索引
				if(list2.get(j).equals(list2.get(j + 4)))
				{
					deleteIndex = j;
					break;
				}
			}
			//删除数字黑洞开始索引之前的数字
			for(int k = 0; k < deleteIndex; k++)
			{
				list2.remove(0);
			}
			//删除数字黑洞之后的数字,只保留数字黑洞一次循环体
			for(int m = 0; m < 10 - deleteIndex - 4; m++)
			{
				list2.remove(list2.size() - 1);
			}
			//打印数字黑洞的一次循环体
			System.out.println(list2);
		}
	}
	/**
	 * @param number 传过来的5位数
	 * @param index 是该方法在递归的时候做标识退出
	 * @return ArrayList 装有数字黑洞的数字序列
	 */
	@SuppressWarnings("unchecked")
	public ArrayList getCycle(int number, int index)
	{
		//首次进入该方法,创建一个ArrayList,用于装数字序列
		if(0 == index) list = new ArrayList();
		
		//当递归十次,返回长度为10的数字序列list
		if(10 == index) return list;
		
		//把传过来的数字转换成String,再把String转换成char[]数组
		String str = String.valueOf(number);
		char[] chars = str.toCharArray();
		
		//再对数组进行升序排序,从而得到最大值和最小值
		Arrays.sort(chars);
		
		//初始化传过来的五位数字
		int first = 0;
		int second = 0;
		int three = 0;
		int four = 0;
		int five = 0;
		
		//当最大值-最小值得到的结果为五位数
		if(5 == chars.length)
		{
			first = Integer.parseInt(String.valueOf(chars[0]));
			second = Integer.parseInt(String.valueOf(chars[1]));
			three = Integer.parseInt(String.valueOf(chars[2]));
			four = Integer.parseInt(String.valueOf(chars[3]));
			five = Integer.parseInt(String.valueOf(chars[4]));
		}
		//当最大值-最小值得到的结果为四位数
		else if(4 == chars.length)
		{
			second = Integer.parseInt(String.valueOf(chars[0]));
			three = Integer.parseInt(String.valueOf(chars[1]));
			four = Integer.parseInt(String.valueOf(chars[2]));
			five = Integer.parseInt(String.valueOf(chars[3]));
		}
		//当最大值-最小值得到的结果为三位数
		else if(3 == chars.length)
		{
			three = Integer.parseInt(String.valueOf(chars[0]));
			four = Integer.parseInt(String.valueOf(chars[1]));
			five = Integer.parseInt(String.valueOf(chars[2]));
		}
		//当最大值-最小值得到的结果为二位数
		else if(2 == chars.length)
		{
			four = Integer.parseInt(String.valueOf(chars[0]));
			five = Integer.parseInt(String.valueOf(chars[1]));
		}
		//当最大值-最小值得到的结果为一位数
		else if(1 == chars.length)
		{
			five = Integer.parseInt(String.valueOf(chars[0]));
		}
		else
		{
			return null;
		}
		//把传过来的五位数排成最大值和最小值
		int minValue = first*10000 + second*1000 + three*100 + four*10 + five;
		int maxValue = first + second*10 + three*100 + four*1000 + five*10000;

		//得到最大值-最小值的差count
		int count = maxValue - minValue;
		
		//把上面得到的差count放到list当中
		list.add((Integer)count);

		//进行递归,递归结束条件由index来控制
		getCycle(count, index + 1);
		return list;
	}
}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    5--[数字黑洞1和4].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    5--[数字黑洞1和4].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码5--[数字黑洞1和4].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码5--[数字黑洞1和4].zip源码scratch2.0 3.0编程项目源文件源码...

    数字黑洞1

    【数字黑洞1】是一种有趣的数学现象,也与算法设计紧密相关。这个概念源自于一个特定的数字游戏,其中任何四位数(前提条件是这四位数字不完全相同)通过一系列操作最终都会达到一个固定点,即数字6174。这个数字被...

    C++黑洞数字 很详细哦

    根据给定的文件标题、描述、标签以及部分内容,本文将详细介绍C++中实现的一个与“黑洞数字”相关的经典程序,并对其中涉及的关键概念和技术进行深入剖析。 ### 黑洞数字的概念 在数学中,“黑洞数字”(Black ...

    5--[123数字黑洞].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    5--[123数字黑洞].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码5--[123数字黑洞].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码5--[123数字黑洞].zip源码scratch2.0 3.0编程项目源文件源码案例...

    Java中数字黑洞实现代码

    Java中数字黑洞实现代码 Java中数字黑洞实现代码主要介绍了Java编程中如何实现数字黑洞算法游戏,其中涉及到了数组、scanner、if语句等Java编程的基础知识。数字黑洞算法游戏是指从一个四位正整数开始,通过不断地...

    黑洞--黑洞探秘.chm

    黑洞探秘黑洞探秘黑洞探秘黑洞探秘黑洞探秘黑洞探秘黑洞探秘

    NSF-PROD-ADS-V4-DC-黑洞旁路配置手册

    NSF-PROD-ADS-V4-DC-黑洞旁路配置手册

    黑洞数Java代码实现

    黑洞数算法的实现。黑洞数是各位数字均不相同的整型数字,持续 进行 最大排列数-最小排列数 操作,当结果循环出现时,即为黑洞数。

    极端Kerr-Taub-NUT黑洞近地平线区域的电磁辐射

    我们研究了极端Kerr-Taub-NUT黑洞时空中近地平线区域的电磁线发射,然后研究了NUT电荷对电磁线发射的影响。 由于存在NUT电荷,赤道平面不再是KTN时空的对称平面,这导致南半球观测者电磁线发射对NUT电荷的依赖性不同...

    Kerr-Newman-NUT-AdS黑洞的隐藏共形对称性

    我们发现非极端的Kerr-Newman-NUT-AdS黑洞在全息上与隐藏的二维共形场理论相对应。 我们显式地构造了对黑洞双重的两个不同的共形场理论(称为J和Q图片),它们对应于角动量J和黑洞的电荷Q。 此外,我们表明这两个...

    Scratch少儿编程项目源代码文件案例蓝桥训练-数字黑洞.zip

    "数字黑洞"游戏是一种数学上的趣题,也被称为“卢卡斯数列”。在游戏中,玩家通常会被要求输入一个数字,然后按照特定规则进行一系列运算,最终会发现所有数字都会进入一个循环或者归零,呈现出“黑洞”的特性。在...

    Kerr-AdS黑洞的焦耳-汤姆森展开

    在本文中,我们研究了扩展相空间中Kerr-AdS黑洞的Joule-Thomson展开。 推导了Kerr-AdS黑洞的Joule-Thomson展开公式。 我们研究了T – P平面上的等焓和数值倒转曲线,并证明了Kerr–AdS黑洞的冷却-加热区域。 我们还...

    蓝桥杯国赛题之C++数字黑洞.zip

    总的来说,解答“蓝桥杯”国赛题之C++数字黑洞,不仅要求参赛者熟悉C++语言的基本语法,还需要掌握数字处理、字符串操作、排序算法以及循环检测等技巧,同时具备良好的问题解决能力和编程思维。通过这个题目,参赛者...

    RN-AdS黑洞的P–V临界度的另一种新颖的Ehrenfest方案

    在这封信中,我们探索了另一个新颖的Ehrenfest方案,该方案也可用于RN-AdS黑洞的PV临界研究中。 Ehrenfest方案的新颖形式既不是古典热力学中的一种,也不是文献中为大正则合奏提出的类推。 在详细推导了新的埃伦...

    6174数字黑洞-少儿编程scratch项目源代码文件案例素材.zip

    在这个项目中,孩子们将通过编写程序来模拟6174数字黑洞的过程,这将帮助他们理解编程的基本结构和控制流。 6174数字黑洞的工作原理是:选取任意一个四位数(不重复的数字),按照数字的大小进行排序,得到两个新的...

    物质耦合的超对称Kerr-Newman-AdS4黑洞

    我们提出了新的解析旋转四维反de Sitter空间(AdS4)黑洞,这些黑洞是经测量的N = 2超重与对称标量流形耦合到Abelian向量多重性的解决方案。 这些配置保留了两个实际的增压,并且对BPS Kerr-Newman-AdS4黑洞具有平滑...

    西西弗斯黑洞【123数字黑洞】 卡普雷卡尔黑洞(重排求差黑洞):三位数黑洞495

    西西弗斯黑洞【123数字黑洞】 /// ​设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数 /// 比如86420135799,按照偶数个数5,奇数个数6,数字总个数11,拼接成一个新的...

    PTA黑洞数(C语言版)

    7-1 黑洞数 (20分) 黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。 任何一个各位数字不全相同的三位数,经有限次“重排求差”操作,总会得到495。最后所得的495即为三位黑洞数。所谓...

    三维广义相对论中的熵:Kerr-AdS黑洞

    这一研究主要采用哈密顿方法分析黑洞热力学,尤其是通过适当处理AdS渐近条件来获得黑洞的守恒电荷与熵值,并通过这些值来证明黑洞动力学的第一定律。 首先,让我们来详细解析熵(Entropy)的概念。熵是热力学中用于...

Global site tag (gtag.js) - Google Analytics