/* 黑洞数
题目:黑洞数又称陷阱数,是类具有奇特转换特性的整数,任何一个数字不全相同的整数,经有限“重排求差”操作,总会得到某一个或一些书,这些书即为黑洞数,
"重排求差":就是把该组数字重新以从小到大,从大到小,再将最大的减去最小的方法
列子:297,重排求差一次得到693.再来一次得到594,再来得到495,继续得到495,反复都得到495.
程序分析:
1.利用Arrays中的sort():升序排序
2.就是1个数拆成一个最大,一个最小,再相减。如果==6174,那么这个数就出来了
*/
import java.util.Arrays;
class Demo17 
{
public static void main(String[] args) 
{
for(int in=1000;in<100000;in++)//遍历4位数
{
System.out.println(in+"验证如下"); if(in%1111==0) //4位都一样的数排除
{
System.out.println("数字全部相同");
continue;
}
else
{
int count = 0; //计算次数
int in2 = in;
do
{
in2 = he(fen(in2)); //调用he()于fen()方法
count++;
}
while (in2!=6174); //直至计算结果为6174 if(in2==6174) //满足,输出结束
{
System.out.println("计算了"+count+"次,命题为真");
}
else //不满足,输出假
{
System.out.println("命题为假");
}
}
} System.out.println("程序结束");
} public static int[] fen(int in)//使用Arrays集合中的对数组进行升序排序的方法sort();
{
int a[] = new int[4];
//千位数
a[0] = in/10000; //百位数
in = in%1000;
a[1] = in/100; //十位数
in = in%100;
a[2] = in/10; //个位数
in  = in%10;
a[3] = in;

Arrays.sort(a); //对指定数组进行升序排列
return a;
} public static int he(int[] a)//合并4位数,重新组成最大和最小的数
{
Arrays.sort(a); //升序排列 int max = a[0]+a[1]*10+a[2]*100+a[3]*1000;//最大
int min = a[3]+a[2]*10+a[1]*100+a[0]*1000;//最小

System.out.println(max+"-"+min+"="+(max-min)); return max-min;
}
}
//程序运行可以,就是求不出,他的值

解决方案 »

  1.   

    import java.util.Arrays;public class Demo17 {
    public static void main(String[] args) {
    for (int in = 1000; in < 10000; in++)// 遍历4位数,这里应该是in < 10000,你写成100000了
    {
    System.out.println(in + "验证如下"); if (in % 1111 == 0) // 4位都一样的数排除
    {
    System.out.println("数字全部相同");
    continue;
    } else {
    int count = 0; // 计算次数
    int in2 = in;
    do {
    in2 = he(fen(in2)); // 调用he()于fen()方法
    count++;
    } while (in2 != 6174); // 直至计算结果为6174 if (in2 == 6174) // 满足,输出结束
    {
    System.out.println("计算了" + count + "次,命题为真");
    } else // 不满足,输出假
    {
    System.out.println("命题为假");
    }
    }
    } System.out.println("程序结束");
    } public static int[] fen(int in)// 使用Arrays集合中的对数组进行升序排序的方法sort();
    {
    int a[] = new int[4];
    // 千位数
    a[0] = in / 1000;// 这里应该是1000,你写成10000了
    // 百位数
    in = in % 1000;
    a[1] = in / 100; // 十位数
    in = in % 100;
    a[2] = in / 10; // 个位数
    in = in % 10;
    a[3] = in; Arrays.sort(a); // 对指定数组进行升序排列
    return a;
    } public static int he(int[] a)// 合并4位数,重新组成最大和最小的数
    {
    Arrays.sort(a); // 升序排列

    int max = a[0] + a[1] * 10 + a[2] * 100 + a[3] * 1000;// 最大
    int min = a[3] + a[2] * 10 + a[1] * 100 + a[0] * 1000;// 最小 System.out.println(max + "-" + min + "=" + (max - min)); return max - min;
    }
    }