4位吸血鬼数字的实现代码与解释
2015-01-19 21:25
183 查看
今天在《Java编程思想》第四章中看到一道练习题,写程序找到所有的4位吸血鬼数字。因为第四章是讲控制流程,一开始始终将思路局限于利用循环进行穷举,但越想越复杂,最后查阅了相关资料,总结出了目前比较高效的实现方法。
最终运行结果如下:
第1组: 1395=15*93
第2组: 1260=21*60
第3组: 1827=21*87
第4组: 2187=27*81
第5组: 1530=30*51
第6组: 1435=35*41
第7组: 6880=80*86
共比较232次,找到7组吸血鬼数
import java.util.Arrays; /** * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字钟选取的数字可以任意排序。 * 以两个0结尾的数字是不允许的。例如:1260=21*60,1260是吸血鬼数字。 * 本程序找出了4位数的所有吸血鬼数字。 * @author Enzuo * */ public class Prictice10 { public static void main(String[] args){ int number,i,j; int calCount = 0, index = 0; //i的值介于10和99之间 for(i = 10; i < 100; i++){ //j的起始值满足条件:1、为避免重复应比i值大;2、i*j的值大于1000 int from = Math.max(1000/i, i+1); //j的终值满足条件:1、比100要小;2、i*j的值小于10000 int to = Math.min(10000/i, 100); for(j = from; j < to; j++){ number = i * j; //此处为提高算法效率,提取了两个筛选条件 //1、以两个0结尾的数字是不允许的,即number%100==0的情况 //2、设number=i*j=abcd=1000a+100b+10c+d,i和j分别由a、b、c、d四个数字两两组合,可设 // i=10a+c,j=10b+d,则number-i-j=900a+90b+9c,能被9整除,其他情况亦如此,可推出 // (number-i-j)%9==0是吸血鬼数字的必要条件,不满足该条件即可排除 if(number % 100 == 0 || (number-i-j) % 9 != 0) continue; calCount++; //对组成number的四个数字按照从小到大排序 char[] char1 = String.valueOf(number).toCharArray(); Arrays.sort(char1); //对组成i和j的四个数字按照从小到大排序 char[] char2 = (String.valueOf(i) + String.valueOf(j)).toCharArray(); Arrays.sort(char2); //排序后的序列相同,则满足吸血鬼数字的条件 if(Arrays.equals(char1, char2)){ System.out.println("第" + ++index + "组: " + number + "=" + i + "*" + j); } } } System.out.println("共比较" + calCount + "次,找到" + index + "组吸血鬼数"); } }
最终运行结果如下:
第1组: 1395=15*93
第2组: 1260=21*60
第3组: 1827=21*87
第4组: 2187=27*81
第5组: 1530=30*51
第6组: 1435=35*41
第7组: 6880=80*86
共比较232次,找到7组吸血鬼数
相关文章推荐
- php生成4位数字验证码的实现代码
- php生成4位数字验证码的实现代码
- 4位吸血鬼数字的java实现
- javascript数字数组去重复项的实现代码
- 问题1:java中没有实现这种“byte a = 0xB2 --> String b = “B2””转换的简单实现需要自己实现。 答:自己编写的转换函数,思路将byte的高低4位分开,分别转换为对应的字符然后合成返回的字符串。 java 代码 1.
- 编写代码实现从输入流中分析出数字串(C++)
- 人民币大写转换(java代码实现从数字转化为大写)
- php中文字母数字验证码实现代码
- js对数组中的数字从小到大排序实现代码
- c 实现 md5 的算法,只由代码,不做解释.抄的网上的留着备用的.
- 数字转化成字符串 (自己用代码实现)
- asp.net中3种验证码示例(实现代码)(数字,数字字母混和,汉字)
- C#实现的【阿拉伯数字转换成中文大写金额】代码(原创)
- 代码实现EditText只能输入数字
- 吸血鬼数字的实现(thinking in java练习题)
- 基于jquery的设置页面文本框 只能输入数字的实现代码
- php中文字母数字验证码实现代码
- 4位吸血鬼数字
- JavaScript 抽奖效果实现代码 数字跳动版
- python中将阿拉伯数字转换成中文的实现代码