Java计算黑洞数的方法示例

本文实例讲述了Java计算黑洞数的方法。分享给大家供大家参考,具体如下:

任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。

比如,刚才的数字会落入:[82962,75933, 63954, 61974]这个循环圈。

请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为[0],这个可以不考虑。循环圈的输出格式仿照:

[82962,75933, 63954, 61974]

其中数字的先后顺序可以不考虑。

Test.java:

public class Test {
static int r=0;
static int b[]=new int[16];
static int c[]=new int[5];
static int sort(int n,boolean boo) //排序函数
{
 int i,j,sum=0,temp;
 int a[]=new int[5];
 for(i=0;i<5;i++)
 {
 a[i]=n%10;
 n/=10;
 }
 for(j=0;j<4;j++)
 for(i=0;i<4-j;i++)
 {
  if(a[i]<a[i+1]&&boo)
  {
  temp=a[i];
  a[i]=a[i+1];
  a[i+1]=temp;
  }
  if(a[i]>a[i+1]&&!boo)
  {
  temp=a[i];
  a[i]=a[i+1];
  a[i+1]=temp;
  }
 }
 for(i=0;i<5;i++)
 sum+=a[i]*(int)Math.pow(10,4-i);
 return sum;
}
static boolean Boo(int d[])//判断函数
{
 int n,t,q,i,j;
 boolean flag=true;
 for(i=0;i<16;i++)
 for(j=i+1;j<16;j++)
  if(b[i]==b[j])//判断是否有循环圈存在,只需要判断是否有相同的一个数出现2次就够了
  {
  d[0]=i;
  d[1]=j;
  n=j-i;
  for(q=0;q<=r;q++)
   for(t=i;t<=j;t++)
   if(c[q]==b[t]) flag=false;//用一维数组存放循环圈的一位数(任意一位都可以,这里选取第一位)
  if(flag) c[r++]=b[i];//如果新生成的循环圈中的任何一位与原一维数组存放的值的不同 则再取循环圈的一位保存
  return flag;
  }
 return flag;
}
public static void main(String[] args)
{
 int n,m,w,t,p;
 int r=1;
 boolean flag=false;
 int d[]=new int[2];
 System.out.println("我们测试结果:");
 for(m=10000;m<100000;m++)
 {
 n=m;
 for(p=0;p<16;p++)
 {
  w=sort(n,true)-sort(n,false);
  b[p]=w;
  n=w;
 }
 if(Boo(d))//输出不同的循环圈
 {
  System.out.printf("[");
  for(t=d[0];t<d[1]-1;t++)
  System.out.printf("%d,",b[t]);
  System.out.printf("%d",b[t]);
  System.out.printf("]\n");
 }
 }
}
}

运行结果:

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • java阶乘计算获得结果末尾0的个数代码实现

    看到题目后,分析了下, 10的阶乘就已经很大了.计算出来再得到这个末尾的0的个数,完全不现实,即使实现了也是很麻烦的. 后来想某个数的阶乘中乘积有5结尾的数字的时候就应该在结果的末尾产生一个0. 付诸实现,测试了几个, 没出错. 贴出来, 大家看看, 有问题了及时指教: 复制代码 代码如下: /**     * 求1000~10000之间的数n的阶层并计算所得的数n!末尾有多少个0?     */    public static void test2(int number){        i

  • Java计算一个数加上100是完全平方数,加上168还是完全平方数

    题目:一个整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少? 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果.请看具体分析: 程序设计: public class test { public static void main (String[]args){ long k=0; for(k=1;k<=100000l;k++) if(Math.floor(Math.sqrt(k+100))=

  • java精度计算代码 java指定精确小数位

    本文实例为大家分享了java指定精确小数位的具体代码,供大家参考,具体内容如下 java代码: public class App2 { public static void main(String[] args) { String val = checkNumber("10.1234155", 2, 6).toString(); System.out.println(val); } public static BigDecimal checkNumber(String number,

  • java计算自然数中的水仙花数的方法分享

    核心代码 /** * m-n自然数中的水仙花数 * @param n * @param m */ static void getNums(int n,int m){ for(int i=m;i<=n;i++){ int ge,shi,bai; double shui; bai=i/100; shi=i%100/10; ge=i%10; shui=Math.pow(bai, 3)+Math.pow(shi, 3)+Math.pow(ge, 3); if(i==shui) System.out.pr

  • java中实现递归计算二进制表示中1的个数

    借助Java语言,运用递归算法计算整数N的二进制表示中1的个数 /*use the recursive algorithme to calculate * the number of "1" in the binary expression * of an Integer N. * Note:if N is an odd, then * the result is the result of N/2 plus 1. * And the program use the bit opera

  • JavaScript黑洞数字之运算路线查找算法(递归算法)实例

    本文实例讲述了JavaScript黑洞数字之运算路线查找算法.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/19

  • java中的数学计算函数的总结

    java中的数学计算函数 Math类: java.lang.Math类中包含基本的数字操作,如指数.对数.平方根和三角函数. java.math是一个包,提供用于执行任意精度整数(BigInteger)算法和任意精度小数(BigDecimal)算法的类. java.lang.Math类中包含E和PI两个静态常量,以及进行科学计算的类(static)方法,可以直接通过类名调用. public static final Double E = 2.7182818284590452354 public

  • java计算任意位水仙花数示例(回文数)

    可计算任意位水仙花数 复制代码 代码如下: public static void main(String[] args) {  int max = 10;  for (int len = 1; len <= max; len++) {   System.out.println(getNarc(len, ""));  } } static StringBuffer strb = new StringBuffer(); static String getNarc(int len, S

  • java计算自幂数和水仙花数

    (例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数)n为1时,自幂数称为独身数.n为2时,没有自幂数.n为3时,自幂数称为水仙花数.n为4时,自幂数称为玫瑰花数.n为5时,自幂数称为五角星数.n为6时,自幂数称为六合数.n为7时,自幂数称为北斗七星数.n为8时,自幂数称为八仙数.n为9时,自幂数称为九九重阳数.n为10时,自幂数称为十全十美数. 复制代码 代码如下: /* * 自幂数 * 自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等

  • Java模拟计算机的整数乘积计算功能示例

    本文实例讲述了Java模拟计算机的整数乘积计算功能.分享给大家供大家参考,具体如下: 计算机计算整数乘积的原理: 实现代码: package math; public class two { /** * Fundamental method * f(n) = O(n^2) * @param a * @param b * @return */ public static int naiveMul(int a,int b){ int x = 0; //判断a中出现1的位置,每当出现1就将b的移位运算

随机推荐