`

卡布列克常数的java实现

阅读更多
Test83.java
此题来源为 廖永鹏的 贵阳面试题.
主要目的考算法.
引用
C语言趣味程序百例精解之JAVA实现(83):卡布列克常数
http://blog.csdn.net/dearbaba2011/article/details/6927515

有改进

package interviewTest;

import java.util.Scanner;

/**
在0到9这些数字中,任选4个数,组成最大的和最小的四位数,然后两数相减;再把结果的数字重新组成一个最大
的数与最小的数,再次相减;.这样不断重复,就会出现一个神秘数,这个神秘数是几?
6174

追答:
9876-1023=8853-3588=5265 6552-2556=3992 9932-2399=7533-3357=4176 7641-1467=6174 7641-1467=6174
 * @author lengzl
 * @email lengzhuolin@anjia365.com
 * @create 2017年2月10日 下午10:09:27
 */
public class Test83{
	   public static void main(String args[]){
		   Scanner in=new Scanner(System.in);
		   System.out.println("Enter a number(non rep):");
		   int num = in.nextInt();
		   //4321
	       new Test83(). KaBuLieKe83(num,0);
	    }
	          
	     /**  
	      * 83。卡布列克常数,挺好玩,实现一下  
	      */  
	     public void KaBuLieKe83(int n, int count) {   
	         int cha = getTheMaxOrMin(n, 1) - getTheMaxOrMin(n, 0);   
	         System.out.println(count + ":" + getTheMaxOrMin(n, 1) + "-"  
	                 + getTheMaxOrMin(n, 0) + " = " + cha);   
	         count++;   
	         if (n == 6174) {   
	             System.out.println("I did it 6174");   
	         } else {   
	             KaBuLieKe83(cha, count);   
	         }   
	     }   
	   
	     /**  
	      * 获取重新排列后最大的数,如2310,得到3210,暂时只要四位  
	      */  
	      public int getTheMaxOrMin(int n, int maxOrMin) {   
	         if (n < 1000 || n > 9999)   
	             return -1;   
	         int a = getThe(n, 4);   
	         int b = getThe(n, 3);   
	         int c = getThe(n, 2);   
	         int d = getThe(n, 1);   
	   
	         int temp = 0;   
	         int[] list = new int[] { a, b, c, d };   
	         for (int i = 0; i < 4; i++) {   
	             for (int j = i; j < 4; j++) {   
	                 if (maxOrMin == 1 ? (list[i] < list[j]) : (list[i] > list[j])) {   
	                     temp = list[i];   
	                     list[i] = list[j];   
	                     list[j] = temp;   
	                 }   
	             }   
	         }   
	         return list[0] * 1000 + list[1] * 100 + list[2] * 10 + list[3];   
	     }   
	     /**  
	      * 获取N右数第i位  
	      */  
	     public int getThe(int num, int i) {   
	         if (i > getBitCount(num) || i < 1)   
	             return -1;   
	         return (num % ((int) Math.pow(10, i))) / (int) Math.pow(10, i - 1);   
	     }   
	   
	     /**  
	      * 获取一个数的位数  
	      */  
	     public int getBitCount(int n) {   
	         int i = 1;   
	         while (n / 10 > 0) {   
	             i++;   
	             n /= 10;   
	         }   
	         return i;   
	     }   
	 } 

结果:
//C:\bat>Java Test83
0:4321-1234 = 3087
1:8730-378 = 8352
2:8532-2358 = 6174
3:7641-1467 = 6174
I did it 6174
分享到:
评论

相关推荐

    098 卡布列克常数 C语言源代码文件

    098 卡布列克常数 C语言源代码文件

    卡布列克常数验证

    就是验证它啦,希望可以帮到大家忙

    验证卡布列克运算(带详细的运算分析资料)

    通过这样的迭代操作,最终结果会收敛到一个固定的数值——6174,这个数值被称为“卡布列克常数”。 #### 二、卡布列克运算的具体实现 为了更好地理解卡布列克运算法则的工作原理及其背后的数学逻辑,我们可以通过...

    卡布列克运算 C++

    卡布列克运算是一个有趣的数学规律,也被称为“6174现象”或“卡普雷卡尔常数”。在C++编程环境下,我们可以编写程序来验证这一规律。以下是关于这个运算的详细解释: 首先,卡布列克运算应用于一个四位数,前提是...

    验证卡布列克数 数据结构课程设计

    在这个数据结构课程设计项目中,你将使用Java语言来实现一个验证卡布列克数的程序,并结合图形用户界面(GUI)进行交互。以下是这个项目可能涉及的一些关键知识点: 1. **数论基础**:首先,你需要了解质数、合数、...

    KaprekarNumbersTest.java 卡布列克数

    KaprekarNumbersTest.java 卡布列克数

    C-C++语言趣味程序设计编程百例精解

    卡布列克常数 84.尼科彻斯定理 85.回文数的形成 86.自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 &lt;br&gt;C/C++语言经典实用趣味程序设计编程百例精解(10) (详解收藏在...

    c语言实例解析-数值趣味数学篇

    098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 ...

    第三次上机题.ppt_电子版_ppt版

    第二个实验是验证卡布列克常数。卡布列克运算涉及到对一个四位数进行特定的排序和计算,最终得到的结果总是6174或者0。在这个过程中,我们定义了一个过程`kblk(n)`,它执行卡布列克运算并可能递归地调用自身。每次...

    若干C,C++语言经典实用趣味程序设计编程精解

    卡布列克常数 84.尼科彻斯定理 85.回文数的形成 86.自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 &lt;br&gt;91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94....

    Vijos 评测服务源代码

    Vijos 评测服务源代码提供了在线编程竞赛平台Vijos的核心组成部分——VTS.EXE的内部实现。这个系统是用Visual Basic .NET 2005编写的,虽然版本较为陈旧,但它揭示了早期在线自动评测系统的设计思想和技术栈。 首先...

    C语言趣味算法

    22. 卡布列克常数:是一个数学常数,与素数分布的模式有关。 23. 尼科彻斯定理:涉及数的平方和与平方和的平方之间的关系。 24. 最大公约数和最小公倍数:基础的数论概念,是求解整数之间关系的常用算法。 25. 真...

    220个经典C程序源码文件,可以做为你的学习设计参考.zip

    098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 ...

    200个经典C程序源码(包括基础篇+数据结构篇+数值计算与趣味数学篇+图形篇+系统篇+常见试题解答篇).zip

    098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 ...

    220个C语言程序源代码集合.zip

    098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 ...

    220个C语言程序源代码.zip

    098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 ...

    200个C程序.rar

    098 卡布列克常数 099 尼科彻斯定理 100 扑克牌自动发牌 101 常胜将军 102 搬山游戏 103 兔子产子(菲波那契数列) 104 数字移动 105 多项式乘法 106 产生随机数 107 堆栈四则运算 108 递归整数四则运算 ...

    WEB实验报告一

    ##### 实验3:卡布列克运算的控制台程序实现 - **实验目的**:理解卡布列克运算的数学原理,并学会如何将其转化为程序实现。 - **实现细节**: - 输入一个4位数,确保各个位上的数字不完全相同。 - 将数字按从大...

    卡布漫画.apk

    卡布漫画ELINK版本,电子书的最佳工具

Global site tag (gtag.js) - Google Analytics