吸血鬼のアルゴリズム


import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Vector;

public class TestVampireNum {
	static ArrayList list = null;
	static int factor1 = 0;
	static int factor2 = 0;
/**
 *   4  ,                   
 *
 */
	static void getFourPlaceVampireNum() {
		for (int i = 1000; i < 10000; i++) {
			list = new ArrayList();
			if (i % 100 == 0)
				continue;
			if (isVampireNum(i)) {
				System.out.println(factor1 + "*"+
					factor2+"\t"+i + "      ");
			}
			list = null;
		}
	}
/**
 *           ,       ,
 *            list ,
 *                  
 * @param num
 * @return
 */
	static boolean isVampireNum(int num) {
		String[] nums = new String[] { "" + num / 1000, "" + num / 100 % 10,
				"" + num % 100 / 10, "" + num % 10 };
		sort(Arrays.asList(nums), new ArrayList());
		for (int i = 0; i < list.size(); i++) {
			List ints = (List) list.get(i);
			 factor1 = Integer.parseInt(ints.get(0).toString()) * 10
					+ Integer.parseInt(ints.get(1).toString());
			 factor2 = Integer.parseInt(ints.get(2).toString()) * 10
					+ Integer.parseInt(ints.get(3).toString());
			if (factor1 * factor2 == num)
				return true;

		}
		return false;

	}
/**
 *      ,    
 * http://blog.csdn.net/sunyujia/archive/2009/04/26/4124011.aspx
 * @param datas
 * @param target
 */
	private static void sort(List datas, List target) {
		if (target.size() == 4) {
			list.add(target);
			return;
		}
		for (int i = 0; i < datas.size(); i++) {
			List newData = new ArrayList(datas);
			List newTarget = new ArrayList(target);
			newTarget.add(newData.get(i));
			newData.remove(i);
			sort(newData, newTarget);
		}

	}
	/**
	 *      
	 *     
	 *
	 */
static void getFourPlaceVampireNum1()
{
    String[] ar_str1, ar_str2;   
    int sum = 0;   
    int from;   
    int to;   
    int i_val;   
    int count = 0;   
    //          
    for (int i = 10; i < 100; i++) {   
      // j=i+1       
      from = Math.max(1000 / i, i + 1);   
      to = Math.min(10000 / i, 100);   
      for (int j = from; j < to; j++) {   
        i_val = i * j;   
                if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) {   
          continue;   
        }   
        count++;   
        ar_str1 = String.valueOf(i_val).split("");   
        ar_str2 = (String.valueOf(i) + String.valueOf(j)).split("");   
        Arrays.sort(ar_str1);   
        Arrays.sort(ar_str2);   
        if (Arrays.equals(ar_str1, ar_str2)) {//      ,          
          sum++;   
          System.out.println(" " + sum + " : " + i + "*" + j + "=" + i_val);   
        }   
      }   
    }   
    System.out.println("   " + sum + "     ");   
    System.out.println(count); 
	}
	public static void main(String[] args0) {
		long start = System.currentTimeMillis();
		getFourPlaceVampireNum();
		long end = System.currentTimeMillis();
		System.out.println(end-start);

	}
}
 紫竹版のアルゴリズムを見て、自分の能力を発見しました..
アルゴリズムにとって効率は最も重要である.