您的位置:首页 > 其它

吸血鬼数字、斐波那契数列算法

2015-01-06 18:02 218 查看
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。

如:1260 = 21 * 60;1827 = 21 * 87

其实现过程如下:

@Test
public void test3(){

for(int i = 1000; i <= 9999; i++){
//4位数中的数字,过滤掉后两位为0的
if((i % 100) != 0){
demo1(i);
}
}

}

/**
* <p>
* 吸血鬼数字算法
* <p>
* @author hxlzpnyist
* @param
* @return
*/
public void demo1(int num){

boolean flag = false;

String var = num + "";
//获取组成数字的 字符 即 1234 ~[1,2,3,4]
char[] vars = var.trim().toCharArray();
char[] vars1 = vars;

List<Integer> list = new ArrayList<Integer>();
//获取数字 拆分后的字符可组成的笛卡尔积 过滤掉 相同数字组成的 两位数 即过滤掉 11 22 33 44
//list 中存储的应类似 [12,13,14,21,23,24]
for (char c : vars) {
for (char ch : vars1) {
if(c != ch){
int ci = (Integer.parseInt(c + "") * 10) + Integer.parseInt(ch + "");
list.add(ci);
}
}
}
//当两位数乘机 = 原数字时,即表示当前数字为吸血鬼数字
for(int i = 0; i < list.size(); i++){

int arg1 = list.get(i);
for(int j = i + 1; j < list.size(); j++){
int arg2 = list.get(j);
if((arg1 * arg2) == num){
flag = true;
System.out.println(num + " = " + arg1 + " * " + arg2);
break;
}
}
if(flag){
break;
}
}
}
注:目前这种实现只适用于四位数的,还需扩展。

斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...

这个数列从第三项开始,每一项都等于前两项之和。

其实现如下:

@Test
public void test2(){

int arg = 34;
demo(arg);
}

/**
* <p>
* 斐波那契数字算法
* <p>
* @author hxlzpnyist
* @param
* @return
*/
public void demo(int arg){

int var = 1;
int temp = 0;
while(var != arg){
int num = var;
System.out.println(var);
var += temp;
temp = num;
}
System.out.println(var);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息