Thinking in Java--吸血鬼数字
2015-05-19 22:30
344 查看
吸血鬼数字是指位数为偶数的数字,可以用一对数字相乘得到,而这对数字个包含乘积一半位数的数字,其中从最初数字中选取的数字可以任意排序.以两个0结尾的数字是不允许的.
写一个程序求出4位数字中的所有吸血鬼数字.
其实就是一个简单的dfs.我们可以将原数字的各位提取出来,然后在去填充新的两个数.如果可以得到两个新数的乘积恰好为原数,则这个数字是吸血鬼数字.下面的代码中IsVampire类提供判断一个数字是否是吸血鬼数的功能,如果是的话,返回其中的一个新数,否则返回-1;
代码如下:
写一个程序求出4位数字中的所有吸血鬼数字.
其实就是一个简单的dfs.我们可以将原数字的各位提取出来,然后在去填充新的两个数.如果可以得到两个新数的乘积恰好为原数,则这个数字是吸血鬼数字.下面的代码中IsVampire类提供判断一个数字是否是吸血鬼数的功能,如果是的话,返回其中的一个新数,否则返回-1;
代码如下:
package lkl; public class Main { public static void main(String[] args){ IsVampire im = new IsVampire(); for(int i=1000;i<=9999;i++){ int t=im.check(i); if(t!=-1){ System.out.println(i+"是吸血鬼数字 "+i+"="+t+"*"+i/t); } } } }
package lkl; import java.util.*; public class IsVampire { private int num,x; private int[] a=new int[4]; private int[] vis=new int[4]; public void dfs(int cur,int t1,int t2) { if(num!=-1) return ; if(cur==4){ if(t1*t2==x) { num=t1; } return; } for(int i=0;i<4;i++){ if(cur==0&&a[i]==0) continue; if(cur==2&&a[i]==0) continue; if(vis[i]==1) continue; vis[i]=1; if(cur<=1) dfs(cur+1,t1*10+a[i],t2); if(cur>=2) dfs(cur+1,t1,t2*10+a[i]); vis[i]=0; if(num!=-1) return ; } } public void Init(int x){ num=-1; this.x=x; ///java中没有C++中的memsest函数,可以调用Arrays中的fill函数 ///统一填充初值,但是因为java不能直接操作内存,这种方法实际上还是 ///堆数组进行逐个填充 Arrays.fill(a, 0); for(int i=0;i<4;i++){ a[i]=x%10; x/=10; } } public int check(int xx){ Init(xx); dfs(0,0,0); return num; } }
相关文章推荐
- 吸血鬼数字的实现(thinking in java练习题)
- 吸血鬼数字—THINKING IN JAVA中一道习题
- Thinking in java吸血鬼数字问题
- THINKING IN JAVA中吸血鬼数字题目的答案,稍作修改
- 【Java】 Thinking in Java 4.8 练习10 吸血鬼数字
- [Thinking in Java]“吸血鬼”数字
- JAVA实现的吸血鬼数字算法,高效率版本(已有网友给出算法说明)
- Java编程思想——吸血鬼数字问题
- Java - 吸血鬼数字
- 【java】吸血鬼数字
- Java 找出四位数的所有吸血鬼数字 基础代码实例
- java 找出4位数的所有吸血鬼数字
- Java 吸血鬼数字
- 吸血鬼数字(JAVA)
- Java 找出四位数的所有吸血鬼数字 基础代码实例
- java输出吸血鬼数字小结
- Java 吸血鬼数字
- java求吸血鬼数字算法 。。。
- JAVA找出4位数的所有吸血鬼数字
- java求吸血鬼数字算法 。。。