吸血鬼のアルゴリズム
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);
}
}
紫竹版のアルゴリズムを見て、自分の能力を発見しました..アルゴリズムにとって効率は最も重要である.