- 浏览: 41762 次
- 性别:
最新评论
题目:
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不被允许的,例如,下列数字都是“吸血鬼”数字:
1260 = 21 * 60
1827 = 21 * 87
2187 = 27 * 81
写一个程序,找出4位数的所有吸血鬼数字。
下面个算法。是我从网上找到的。我觉得这个算法确实不错。比我写的好多了。
public class XiXieGui { /** * 吸血鬼数字算法 * 如:12*60=1260 * YangL. */ public static void main(String[] args) { String[] ar_str1, ar_str2; int sum = 0; for (int i = 10; i < 100; i++) { for (int j = i + 1; j < 100; j++) { int i_val = i * j; if (i_val < 1000 || i_val > 9999) continue; // 积小于1000或大于9999排除,继续下一轮环 ar_str1 = String.valueOf(i_val).split(""); ar_str2 = (String.valueOf(i) + String.valueOf(j)).split(""); java.util.Arrays.sort(ar_str1); java.util.Arrays.sort(ar_str2); if (java.util.Arrays.equals(ar_str1, ar_str2)) { // 排序后比较,为真则找到一组 sum++; System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val); } } } System.out.println("共找到" + sum + "组吸血鬼数"); } }
这个算法应该是比较简单的了。算法中用到String.valueOf(j)).split("");的方法来把数字转换为字符串,以拆分数字的方法用的很巧妙了。把数字的比较,转换为对字符串的比较,实在高明。
下面是我写的代码,虽然不怎么样。还是贴出来让大家看看那吧。如果大家发现有什么地方可以优化。希望大家指出。谢谢。
public class XiXueGui { public static void main(String[] args) { char[] c = new char[2]; for (int x = 1000; x < 10000; x++) { if(x%100==0) continue;//排除尾为俩个00的数字 String str = String.valueOf(x); all: for (int i = 0; i < str.length(); i++) { for (int k = i + 1; k < str.length(); k++) { //第一个数 int num11 = ((str.charAt(i) - '0') * 10) + (str.charAt(k) - '0'); //第二个数,在第一个数的基础上进行交换 int num12 = ((str.charAt(k) - '0') * 10) + (str.charAt(i) - '0'); //找到另外俩个数字,然后也进行组合 int count = 0; for (int j = 0; j < str.length(); j++) { if (j != i && j != k) { c[count] = str.charAt(j); count++; } } int num1 = ((c[0] - '0') * 10) + (c[1] - '0'); int num2 = ((c[1] - '0') * 10) + (c[0] - '0'); //判断是否符合条件 if (num11 * num1 == x) { System.out.println(num11 + "*" + num1 + "=" + x); break all; } else if (num11 * num2 == x) { System.out.println(num11 + "*" + num2 + "=" + x); break all; } else if (num12 * num1 == x) { System.out.println(num12 + "*" + num1 + "=" + x); break all; } else if (num12 * num2 == x) { System.out.println(num12 + "*" + num2 + "=" + x); break all; } } } } } }
输出效果:
21*60=1260
15*93=1395
41*35=1435
51*30=1530
21*87=1827
27*81=2187
86*80=6880
通过对第一种方法的灵感,我又写出了一种方法。虽然方法一样。让大家见笑了。
public class XiXueGui { public static void main(String[] args) { for(int i=10;i<100;i++) { for(int j=i+1;j<100;j++) { int val=i*j;//俩数相乘的积 String valStr=String.valueOf(val); if(valStr.length()!=4) continue;//不足四位则进行下一次 String ijStr=String.valueOf(i)+String.valueOf(j); if(Integer.parseInt(ijStr)%100==0) continue;//如果尾部为俩个0则跳过 //判断俩个字符是否含有相同的字符。 for(int k=0;k<4;k++) valStr=valStr.replaceFirst(ijStr.charAt(k)+"", ""); if(valStr.length()==0) { System.out.println(i+"*"+j+"="+String.valueOf(val)); } } } } }
发表评论
-
2012-03-16 20:52 最大公约数;最小公倍数
2012-05-18 21:45 1371求最小公倍数方法如下: (1)、两数相乘法。 ... -
裴波那契算法
2012-05-18 21:40 892裴波那契算法,数组算法 #include<st ... -
一些的算法的格式
2012-05-17 12:15 1084做题目做久了之后就会发现,算法是有格式的。 一、深度优 ... -
第三届蓝桥杯预赛真题-C++本科组-10题(Java实现)
2012-05-15 11:11 975今盒子里有n个小球,A、B两人轮流从盒中取球,每个 ... -
第三届蓝桥杯预赛真题-C++高职组-10题(Java实现)
2012-05-15 10:57 12822x3=6个方格中放入ABCDE五个字母,右下角的那个 ... -
第三届蓝桥杯预赛真题-Java高职组-10题
2012-05-14 13:16 1992匪警请拨110,即使手机欠 ... -
第三届蓝桥杯预赛真题-Java本科组-10题
2012-05-14 12:41 1522泊松是法国数学家、物理学家和力学家。他一生致力科学事 ... -
八皇后-位运算版
2012-01-12 18:38 1245八皇后问题,是一 ... -
计算24点-利用二叉树原理
2012-01-10 21:03 1658问题描述80年代全世界流行一种数字游戏,在中国我们把这种游戏称 ... -
字符串的排列(A(m,n)),可重复选
2012-01-09 13:28 1312题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多 ... -
蛇形矩阵
2012-01-09 13:38 1060Problem蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上 ... -
寻找最短路径
2012-01-07 18:51 1177题目:给定一个起点和一个终点。在一个8*8的棋盘上找出一条最短 ... -
字符串的排列(A(m,n))
2012-01-07 18:18 990题目:有A,B,C,D,E 5个字母,从其中任选3个,要求列出 ... -
字符串的组合(C(m,n))
2012-01-07 17:46 1402题目:有A,B,C,D,E 5个字母,从其中任选3个,要求列出 ... -
汉诺塔
2012-01-07 17:32 974关于汉诺塔大家应该很熟悉吧。 河內之塔(Towers ... -
三角螺旋矩阵
2012-01-07 17:27 1120打印如下矩阵,如果 n=7 则输出: 1 18 2 ...
相关推荐
在编程领域,"吸血鬼数字"是一种特殊的数字类型,这个概念源于数学,后被引入到编程挑战中,成为一种有趣的算法问题。4位吸血鬼数字是指由四个不同的数字组成,可以分解成两个两位数的乘积,这两个两位数的各位数字...
### 吸血鬼数字的理解与计算 #### 一、什么是吸血鬼数字? 吸血鬼数字(Vampire number)是一种有趣的数学概念,属于娱乐数学的一部分。一个标准的n位数称为一个n阶吸血鬼数字,如果它可以表示为两个n/2位数相乘的...
吸血鬼数字,又称为吸血鬼数或德古拉数,是指一个四位数(或者更一般的n位数),它的每一位数字可以分为两组,每组包含一半的数字,这两组数字相乘的结果等于原数。例如,1264 是一个吸血鬼数字,因为 12 * 64 = ...
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字...
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以2个0结尾的数字是不允许的,例如,下列数字都是吸血鬼数字: 1260 ...
THINK IN JAVA上的课后题,只是寻找4位数的。
在给定的压缩包文件中,"复件 1-10000两数相乘的所有吸血鬼数字.txt"很可能是包含了1到10000所有吸血鬼数对的列表,这样的文件可以用于验证自己的程序结果或进行进一步的分析。而另外两个文件"复件 新建 文本文档6....
《SWF吸血鬼:进程提取工具深度解析》 在数字化时代,SWF(ShockWave Flash)文件广泛应用于网页和应用程序中,展示丰富的多媒体内容。然而,有时我们需要从运行的进程中提取这些SWF文件,例如为了分析、调试或保存...
【Flash吸血鬼】是一种工具或技术,专门用于从zineMaker这样的电子杂志制作软件创建的模板中提取SWF(ShockWave Flash)文件。SWF是Adobe Flash平台生成的交互式内容格式,常用于在线多媒体展示、游戏和应用程序。...
赫尔辛一个POSIX吸血鬼数字生成器,内置了heapsort。该项目的重点是性能,代码可读性和可移植性。 在helsing / configuration.h中,您可以轻松设置线程数,选择算法实现并进行调整,调整详细程度并启用从检查点恢复...
吸血鬼算法是指一种特殊的算法,它可以将一个数字分解成两个相同长度的数字乘积。这种算法通常用于解决某些特殊的数学问题。 在给定的代码中,我们可以看到作者使用Java语言编写了一个吸血鬼算法。该算法的主要思想...
《吸血鬼Flash Vampire_22:从EXE电子书中提取SWF的利器》 在数字出版领域,尤其是电子书籍的制作中,Flash技术曾被广泛应用于制作动态、交互式的阅读体验。然而,随着HTML5的兴起和Flash的逐渐退役,如何从那些...
##挑战:给定一个数字,检测并显示介于0和该给定数字之间的所有吸血鬼数字吸血鬼编号-Fang1 * Fang2 规则1:吸血鬼编号必须为偶数位数规则2:每个毒牙的位数必须是吸血鬼数的一半规则3:吸血鬼编号中的所有数字必须...
《Flash吸血鬼:深入解析Flash精灵的提取技术》 在数字艺术与动画的世界中,Flash作为一种曾经风靡一时的创作工具,为无数设计师提供了展现创意的舞台。然而,随着时间的推移,虽然Flash逐渐淡出主流,但其丰富的...
有多种关于吸血鬼数字的算法 ! 输出结果为: 1260 = 21 * 60 1395 = 15 * 93 1435 = 41 * 35 1530 = 51 * 30 1827 = 87 * 21 2187 = 27 * 81 6880 = 86 * 80 6880 = 80 * 86 以上仅供参考:
在Java编程领域,"吸血鬼数字"是一个有趣的算法问题,它涉及到数字处理和字符串操作。吸血鬼数字(Vampire Number)是指一个大于1的偶数,可以由两个较小的正整数相乘得到,这两个小整数的位数相同,且它们的所有...
10. **吸血鬼数字识别**:编写代码识别特定位数的吸血鬼数字,涉及字符串操作、排序和乘法验证,挑战高级逻辑与算法设计能力。 以上知识点覆盖了Java编程的基础语法、面向对象编程、控制流程、数据类型操作及高级...