首页 > 分享 > 优化水仙花数求解算法

优化水仙花数求解算法

水仙花数的求解-算法优化

算法一

package narcissus;
//效率最高的算法之一
import java.math.BigInteger;
import java.util.Arrays;
//效率很慢,而且时间不能正常显示
public class RefSXS{
 static BigInteger[] table=new BigInteger[10];
 public static int N=3;
 static int[] num=new int[N];
 public static void main(String[] args){
  long time1=System.currentTimeMillis();
  generateTable();
  generateNumber();
  long time2=System.currentTimeMillis();
  String spend=String.valueOf(time2-time1);
  System.out.println("总共花费"+spend+"ms");
 }
 public static void generateTable(){
  for(int i=0;i<10;i++){
   table[i]=BigInteger.valueOf(i).pow(N);
  }
 }
 public static void generateNumber(){

  int[] num=new int[N];
  int i=0;
  while(true){
   if(i==N-1){
    isSXS(num);
   }else{
    i++;
    num[i]=num[i-1];
    continue;
   }
   //回溯到指定位置为止
   while(i>=0&&num[i]==9){
    i--;
   }
   if(i>=0){
    num[i]++;
   }else{
    break;
   }
  }
 }
 private static void isSXS(int[] num) {
  BigInteger y=BigInteger.valueOf(0);
  for(int a:num){
   y=y.add(table[a]);
  }
  int[] sum=new int[N];
  String xs=y.toString();
  if(xs.length()>num.length){
   return;
  }
  for(int i=0;i
   sum[i]=xs.charAt(i)-'0';
  }
  Arrays.sort(sum);

  if(Arrays.equals(num, sum)&&xs.length()==N){
   System.out.println(y);
  }
 }
}

算法二

package narcissus;
/*
 * 我自己写的模拟加法操作+组合数学0-9(需要去除10,20,30,……,90)-》
 * 11-19(需要去除21,31,41,……,91)-》
 * 22-29(需要去除32,42,……,92)-》
 * 33-39(需要去除43,53,……,93)-》……
 */
import java.math.BigInteger;
import java.util.Arrays;
//效率很慢,而且时间不能正常显示
public class MyOwnSXS2{
 static BigInteger[] table=new BigInteger[10];
 public static int N=21;
 static int[] num=new int[N];
 public static void main(String[] args){
  long time1=System.currentTimeMillis();
  generateTable();
  generateNumber();
  long time2=System.currentTimeMillis();
  String spend=String.valueOf(time2-time1);
  System.out.println("总共花费"+spend+"ms");
 }
 public static void generateTable(){
  for(int i=0;i<10;i++){
   table[i]=BigInteger.valueOf(i).pow(N);
  }
 }
 public static void generateNumber(){

  int[] num=new int[N];
  int i=0;
  while(true){
   i=N-1;
   isSXS(num);
   num[i]++;
   while(i>=0&&num[i]>9){
    i--;
    if(i<0) break;
    num[i]++;
    num[i+1]=0;
   }
   if(i<0) break;
   while(i
    num[i+1]=num[i];
    i++;
   }
  }
 }
 private static void isSXS(int[] num) {
  BigInteger y=BigInteger.valueOf(0);
  for(int a:num){
   y=y.add(table[a]);
  }
  int[] sum=new int[N];
  String xs=y.toString();
  if(xs.length()>num.length){
   return;
  }
  for(int i=0;i
   sum[i]=xs.charAt(i)-'0';
  }
  Arrays.sort(sum);

  if(Arrays.equals(num, sum)&&xs.length()==N){
   System.out.println(y);
  }
 }
}

算法三

package narcissus;
//我自己写的模拟加法操作算法:只是减少了for循环,用while实现多重循环
//针对所有的数的验证
import java.math.BigInteger;
import java.util.Arrays;
//效率很慢,而且时间不能正常显示
public class MyOwnSXS1{
 static BigInteger[] table=new BigInteger[10];
 public static int N=9;
 static int[] num=new int[N];
 public static void main(String[] args){
  long time1=System.currentTimeMillis();
  generateTable();
  generateNumber();
  long time2=System.currentTimeMillis();
  String spend=String.valueOf(time2-time1);
  System.out.println("总共花费"+spend+"ms");
 }
 public static void generateTable(){
  for(int i=0;i<10;i++){
   table[i]=BigInteger.valueOf(i).pow(N);
  }
 }
 public static void generateNumber(){

  int[] num=new int[N];
  int i=0;
  while(true){
   i=N-1;
   isSXS(num);
   num[i]++;
   while(i>=0&&num[i]>9){
    i--;
    if(i<0) break;
    num[i]++;
    num[i+1]=0;
   }
   if(i<0) break;
  }
 }
 private static void isSXS(int[] num) {
  BigInteger y=BigInteger.valueOf(0);
  for(int a:num){
   y=y.add(table[a]);
  }
  int[] sum=new int[N];
  String xs=y.toString();
  if(xs.length()>num.length){
   return;
  }
  for(int i=0;i
   sum[i]=xs.charAt(i)-'0';
  }
  Arrays.sort(sum);

  if(Arrays.equals(num, sum)&&xs.length()==N){
   System.out.println(y);
  }
 }
}

相关知识

水仙花数求解
Raptor水仙花数算法流程图
java求水仙花数简单算法
Python实现水仙花数高效查找算法与应用实例详解
水仙花数算法实现:Python计算100
求解物流配送问题的混合粒子群算法
花授粉优化算法及代码实现
算法——X^3+Y^3+Z^3=XYZ(水仙花数)
【优化求解】基于萤火虫算法GSO求解最优目标matlab代码
智能优化算法:食肉植物算法

网址: 优化水仙花数求解算法 https://m.huajiangbk.com/newsview2336955.html

所属分类:花卉
上一篇: 探秘合欢花中药,功效、应用与常见
下一篇: 求财时应该选择哪种花?这种花的花