1 简介
数字黑洞6174,也称“卡谱耶卡常数”(Kaprekar)。
任意选一个四位数(数字不能完全相同),把所有的数字从大到小排列,再把所有数字从小到大排列,用前者减去后者,得到一个新的数;重复将新得到的数进行上述操作,7步之内,必然会得到6174。
如:任选四位数:3、6、8、8
8863-3688=5175 (一步)
7551-1557=5994 (二步)
9954-4599=5355 (三步)
5553-3555=1998 (四步)
9981-1899=8082 (五步)
8820-288=8532 (六步)
8532-2358=6174 (七步)
2 Java代码实现
import java.util.Arrays;
import java.util.Scanner;
public class KaprekarOne {
public static void main(String[] args){
Integer kapre=6174;
System.out.println("请依次输入任意不相同的4个数: ");
int[] intArr=new int[4];
for(int i = 0; i < 4; i++){
Scanner inputW = new Scanner(System.in);
intArr[i]=inputW.nextInt();
}
System.out.println("*******************************");
for (int i=1;i<9;i++){
int kap=kaprekar(intArr);
if(Integer.valueOf(kap).equals(kapre)){
System.out.println("第 "+i+" 步 Kaprekar常数6174出现!");
break;
}
intArr=intToArray(kap);
}
}
//计算数值
static int kaprekar(int[] arrayInt) {
//计算最小的四位数
//数组升序
Arrays.sort(arrayInt);
String strIntMini="";
for (int num : arrayInt) {
strIntMini=strIntMini+Integer.toString(num);
}
int intMini=Integer.parseInt(strIntMini);
System.out.println("最小的4位数是: "+intMini);
//计算最大的四位数
//数组降序
int sizeArray=arrayInt.length;
int[] newArrayInt=new int[sizeArray];
newArrayInt=arrayIntDesc(arrayInt);
String strIntMax="";
for (int num : newArrayInt) {
strIntMax=strIntMax+Integer.toString(num);
}
int intMax=Integer.parseInt(strIntMax);
System.out.println("最大的4位数是: "+intMax);
int kap=intMax-intMini;
System.out.println("二数相减为:"+intMax+"-"+intMini+"="+kap);
System.out.println("*******************************");
return kap;
}
//数组降序
static int[] arrayIntDesc(int[] arrayInt){
int sizeArray=arrayInt.length;
int[] newArrayInt=new int[sizeArray];
for (int i = arrayInt.length - 1; i >= 0; i--) {
newArrayInt[sizeArray-1-i]=arrayInt[i];
}
return newArrayInt;
}
//数字转数组
static int[]intToArray(int num){
String sNum=Integer.toString(num);
int lNum=sNum.length();
int[] arrayInt=new int[lNum];
for (int i=0;i<lNum;i++){
arrayInt[i]=Integer.parseInt(sNum.substring(i,i+1));
}
return arrayInt;
}
}
3 运行结果