用java语言来验证一下四位数的数字黑洞,代码如下:
package Number_6174;
import java.util.Scanner;
public class number_6174 {
private static void bubble_sort_up(int arry[])
{
int i,j,t;
for(i = arry.length-1;i>0;--i)
for(j=0;j<i;++j)
if(arry[j]>arry[j+1])
{
t = arry[j];
arry[j] = arry[j+1];
arry[j+1] = t;
}
}
private static void bubble_sort_down(int arry[])
{
int i,j,t;
for(i = arry.length-1;i>0;--i)
for(j=0;j<i;++j)
if(arry[j]<arry[j+1])
{
t = arry[j];
arry[j] = arry[j+1];
arry[j+1] = t;
}
}
public static void main(String[] args) {
int x,y,i,arry[]={1,2,3,4},count=0,temp=0;
System.out.println("请输入一个四位整数(禁止输入'AAAA'式的数字):");
Scanner sc = new Scanner(System.in);
x = sc.nextInt(); //接收到的数字赋值给x
while(x<=1000 || x>=9999) //范围判断
{
System.out.println("请重新输入!");
x = sc.nextInt();
}
while(true)
{
if(x==temp)
{
System.out.println("\n"+temp+"是一个数字黑洞!");
break;
}
for(i=0;i<4;++i) //转化为数组处理
{
arry[0] = x/1000;
arry[1] = x/100%10;
arry[2] = x/10%10;
arry[3] = x%10;
}
bubble_sort_down(arry); //最大值
x = arry[0]*1000 + arry[1]*100 + arry[2]*10 + arry[3];
bubble_sort_up(arry); //最小值
y = arry[0]*1000 + arry[1]*100 + arry[2]*10 + arry[3];
x = x - y; //结果
temp = x;
count++;
System.out.println("第"+count+"次结果 :"+x);
for(i=0;i<4;++i) //转化为数组处理
{
arry[0] = x/1000;
arry[1] = x/100%10;
arry[2] = x/10%10;
arry[3] = x%10;
}
bubble_sort_down(arry); //最大值
x = arry[0]*1000 + arry[1]*100 + arry[2]*10 + arry[3];
bubble_sort_up(arry); //最小值
y = arry[0]*1000 + arry[1]*100 + arry[2]*10 + arry[3];
x = x - y;
while(x==0) //对AAAA式的数字进行限制
{
System.out.println("请重新输入!");
x = sc.nextInt();
}
count++;
System.out.println("第"+count+"次结果 :"+x);
}
}
}
例如输入:1999
输出为:
请输入一个四位整数(禁止输入'AAAA'式的数字):
1999
第1次结果 :7173
第2次结果 :3087
第3次结果 :6174
第4次结果 :6174
6174是一个数字黑洞!
原理:例如输入一个1999,我们要先把它进行排序;9991 - 1999 = 7173,然后再将7173再次排序;7731 - 1377…以此类推。程序结束条件就是最后一次的差值和上一次的差值相等.即为7641 - 1467 = 6174。