卡布列克常数的java实现_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 卡布列克常数的java实现

卡布列克常数的java实现

 2017/2/11 5:31:22  lengzl  程序员俱乐部  我要评论(0)
  • 摘要:Test83.java引用C语言趣味程序百例精解之JAVA实现(83):卡布列克常数http://blog.csdn.net/dearbaba2011/article/details/6927515packageinterviewTest;importjava.util.Scanner;/**在0到9这些数字中,任选4个数,组成最大的和最小的四位数,然后两数相减;再把结果的数字重新组成一个最大的数与最小的数,再次相减;.这样不断重复,就会出现一个神秘数,这个神秘数是几?6174追答:9876
  • 标签:实现 Java
Test83.java
引用C语言趣味程序百例精解之JAVA实现(83):卡布列克常数
http://blog.csdn.net/dearbaba2011/article/details/6927515

class="java" name="code">
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
发表评论
用户名: 匿名