java输出吸血鬼数字小结
2014-11-05 15:53
441 查看
实习了四个月,感觉失去了很多也得到了很多,现在又重新开始记录自己的点滴。
昨天在看《java编程思想》的时候,看到一道练习题觉得挺有意思就试着编了一下,好久不编程序都生疏了。下面就先看看我最开始编的程序,这是我看到题目时的第一反应,后面看了别人写的一些代码觉得非常不错就摘录了过来。
程序运行结果如下:
这里的结果还有个重复的,就是因为四位数中有两个8造成的。尝试着通过判断四位数中重复数字的个数来把情况分类,后面越想越复杂。后面想到了再补上修改代码。
下面引用一个别人写的代码,这里稍微修改了一下:
(引用地址http://www.oschina.net/code/snippet_190769_14639)
程序运行结果如下:
觉得这个方法不错,很新颖,所以摘录过来让大家参考。当然还有很多好的代码,欢迎大家一起探讨学习。
实习了四个月,感觉失去了很多也得到了很多,现在又重新开始记录自己的点滴。
昨天在看《java编程思想》的时候,看到一道练习题觉得挺有意思就试着编了一下,好久不编程序都生疏了。下面就先看看我最开始编的程序,这是我看到题目时的第一反应,后面看了别人写的一些代码觉得非常不错就摘录了过来。
package controler4; /** * 问题描述: * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字 * 各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。 * 例如: * 1260 = 21 * 60 1827 = 21 * 87 2187 = 27 * 81 * 要求输出所有四位数的吸血鬼数字。 */ public class Ex10_3 { public static void main(String[] args) { //num数组存储四位数字 int num[] = new int[4], j = 0, k = 1; //fir,sec数组分别存储第1个,第2个两位数 int fir[] = new int[12], sec[] = new int[12]; //统计程序执行时间 long start = System.currentTimeMillis(); for (int i = 1001; i < 9999; i++) { for(char c : (Integer.toString(i)).toCharArray()) num[j++] = (int)c - 48; j = 0; if (num[2] == 0 && num[3] == 0) continue; //分12种情况(a b c d)? //ab * cd, ab * dc, ba * cd, ba * dc //ac * bd, ac * db, ca * bd, ca * db //ad * bc, ad * cb, da * bc, da * cb fir[0] = num[0] * 10 + num[1]; sec[0] = num[2] * 10 + num[3]; fir[1] = num[0] * 10 + num[1]; sec[1] = num[3] * 10 + num[2]; fir[2] = num[1] * 10 + num[0]; sec[2] = num[2] * 10 + num[3]; fir[3] = num[1] * 10 + num[0]; sec[3] = num[3] * 10 + num[2]; fir[4] = num[0] * 10 + num[2]; sec[4] = num[1] * 10 + num[3]; fir[5] = num[0] * 10 + num[2]; sec[5] = num[3] * 10 + num[1]; fir[6] = num[2] * 10 + num[0]; sec[6] = num[1] * 10 + num[3]; fir[7] = num[2] * 10 + num[0]; sec[7] = num[3] * 10 + num[1]; fir[8] = num[0] * 10 + num[3]; sec[8] = num[1] * 10 + num[2]; fir[9] = num[0] * 10 + num[3]; sec[9] = num[2] * 10 + num[1]; fir[10] = num[3] * 10 + num[0]; sec[10] = num[1] * 10 + num[2]; fir[11] = num[3] * 10 + num[0]; sec[11] = num[2] * 10 + num[1]; for (int m = 0; m < 12; m++) { if (fir[m] * sec[m] == i) { System.out.println("第" + k + "组:" + fir[m] + " * " + sec[m] + " = " + i); k++; } } } long end = System.currentTimeMillis(); System.out.println("程序总共执行了" + (end - start) + "ms"); } }
程序运行结果如下:
这里的结果还有个重复的,就是因为四位数中有两个8造成的。尝试着通过判断四位数中重复数字的个数来把情况分类,后面越想越复杂。后面想到了再补上修改代码。
下面引用一个别人写的代码,这里稍微修改了一下:
(引用地址http://www.oschina.net/code/snippet_190769_14639)
package controler4; import java.util.Arrays; public class Ex10_4 { public static void main(String[] args) { long start = System.currentTimeMillis(); int k = 1; for(int i = 1; i < 100; i++){ for(int j = i + 1; j < 100; j++){ //比较两个二位数合在一起与它们相乘后的结果是否相等 if(i * j > 1000){ String a = i + "" + j; String b = i * j + ""; if(equal(a, b)) { System.out.println("第" + k + "组:" + i + " * " + j + " = " + (i * j)); k++; } } } } long end = System.currentTimeMillis(); System.out.println("程序共执行了" + (end - start) + "ms."); } //判断两个字符串包含的数字是否一致 private static boolean equal(String a, String b) { //先排序 char[] as = a.toCharArray(); char[] bs = b.toCharArray(); Arrays.sort(as); //排序 Arrays.sort(bs); //排序 if(Arrays.equals(as, bs)) return true; return false; } }
程序运行结果如下:
觉得这个方法不错,很新颖,所以摘录过来让大家参考。当然还有很多好的代码,欢迎大家一起探讨学习。
相关文章推荐
- java中格式化输出数字
- java.text.DecimalFormat()格式化输出数字
- 开始学java之格式化数字输出
- 吸血鬼数字的java编程 java编程思想上的题目
- java格式化输出数字总结
- java中格式化输出数字
- Java 小例子:输出格式化数字
- java中格式化输出数字
- JAVA判断字符是否为数字小结
- Java核心类库——DecimalFormat将数字格式化输出
- java 递归 输出回文数字
- Java中格式化输出数字
- Java技巧:格式化输出数字
- java从命令行输入一个数,输出其包含数值相邻相加的和等于输入的数字
- java实现输出字符串中的数字字符
- java中格式化输出数字
- JAVA实现的吸血鬼数字算法,高效率版本(已有网友给出算法说明)
- java中格式化输出数字
- 【小程序】JAVA实现从10~50中随机生成50个数,统计出现的数字及次数,输出出现最多的次数及对应的数字,按数字升序排列。
- 吸血鬼数字的实现(thinking in java练习题)