import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Vector;
public class TestVampireNum {
static ArrayList list = null;
static int factor1 = 0;
static int factor2 = 0;
/**
* 遍历4位数,对每一个四位数进行判断是否为吸血鬼数字
*
*/
static void getFourPlaceVampireNum() {
for (int i = 1000; i < 10000; i++) {
list = new ArrayList();
if (i % 100 == 0)
continue;
if (isVampireNum(i)) {
System.out.println(factor1 + "*"+
factor2+"\t"+i + "是吸血鬼数字");
}
list = null;
}
}
/**
* 获得四位数的各个位数,并且进行全排列,
* 把全排列获得的组数存在list中,
* 并在对每种排列所产生的结果进行测试
* @param num
* @return
*/
static boolean isVampireNum(int num) {
String[] nums = new String[] { "" + num / 1000, "" + num / 100 % 10,
"" + num % 100 / 10, "" + num % 10 };
sort(Arrays.asList(nums), new ArrayList());
for (int i = 0; i < list.size(); i++) {
List ints = (List) list.get(i);
factor1 = Integer.parseInt(ints.get(0).toString()) * 10
+ Integer.parseInt(ints.get(1).toString());
factor2 = Integer.parseInt(ints.get(2).toString()) * 10
+ Integer.parseInt(ints.get(3).toString());
if (factor1 * factor2 == num)
return true;
}
return false;
}
/**
* 全排列方法,方法来自
* http://blog.csdn.net/sunyujia/archive/2009/04/26/4124011.aspx
* @param datas
* @param target
*/
private static void sort(List datas, List target) {
if (target.size() == 4) {
list.add(target);
return;
}
for (int i = 0; i < datas.size(); i++) {
List newData = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newData.get(i));
newData.remove(i);
sort(newData, newTarget);
}
}
/**
* 紫竹版算法
* 来自网络
*
*/
static void getFourPlaceVampireNum1()
{
String[] ar_str1, ar_str2;
int sum = 0;
int from;
int to;
int i_val;
int count = 0;
// 双重循环穷举
for (int i = 10; i < 100; i++) {
// j=i+1避免重复
from = Math.max(1000 / i, i + 1);
to = Math.min(10000 / i, 100);
for (int j = from; j < to; j++) {
i_val = i * j;
if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) {
continue;
}
count++;
ar_str1 = String.valueOf(i_val).split("");
ar_str2 = (String.valueOf(i) + String.valueOf(j)).split("");
Arrays.sort(ar_str1);
Arrays.sort(ar_str2);
if (Arrays.equals(ar_str1, ar_str2)) {// 排序后比较,为真则找到一组
sum++;
System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val);
}
}
}
System.out.println("共找到" + sum + "组吸血鬼数");
System.out.println(count);
}
public static void main(String[] args0) {
long start = System.currentTimeMillis();
getFourPlaceVampireNum();
long end = System.currentTimeMillis();
System.out.println(end-start);
}
}
看了紫竹版的算法,才发现自己的能力。。。。
对于算法来说,效率才是最重要的。。
分享到:
相关推荐
在编程领域,"吸血鬼数字"是一种特殊的数字类型,这个概念源于数学,后被引入到编程挑战中,成为一种有趣的算法问题。4位吸血鬼数字是指由四个不同的数字组成,可以分解成两个两位数的乘积,这两个两位数的各位数字...
### 吸血鬼数字的理解与计算 #### 一、什么是吸血鬼数字? 吸血鬼数字(Vampire number)是一种有趣的数学概念,属于娱乐数学的一部分。一个标准的n位数称为一个n阶吸血鬼数字,如果它可以表示为两个n/2位数相乘的...
在这个问题中,我们将探讨如何使用Java编程语言来实现找到所有四位吸血鬼数字的方法,并比较三种不同的算法效率。 首先,我们可以采用暴力枚举法,遍历所有四位数并检查它们是否为吸血鬼数字。这种方法是最直观的,...
THINK IN JAVA上的课后题,只是寻找4位数的。
《Survivor.IO》是一款以吸血鬼幸存者为主题的独立游戏,其源码为我们提供了深入理解游戏开发过程和实现机制的机会。在这个项目中,开发者并未包含与“dots”相关的部分,这可能意味着游戏的核心逻辑、画面渲染或者...
标题中的“吸血鬼骑士占卜游戏”表明这是一个与热门动漫《吸血鬼骑士》相关的游戏,而游戏的形式则是占卜。占卜游戏通常是指通过某种随机或预先设定的规则来预测或揭示未知信息,这类游戏往往具有娱乐性和趣味性,...
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以2个0结尾的数字是不允许的,例如,下列数字都是吸血鬼数字: 1260 ...
在IT领域,"吸血鬼数组合"是一个有趣的数学概念,尤其在计算机编程和算法设计中常常被用作练习或挑战。标题“1-10000中的吸血鬼数组合”指的是寻找1到10000之间满足特定条件的数对,这些数对被称为“吸血鬼数”。在...
【中华吸血鬼----传说中的源码】 "中华吸血鬼"这个名词在IT行业中,可能指的是一个特定的软件项目或者编程作品。由于标题和描述的重复性,我们可以推测这是一份关于“中华吸血鬼”项目的源代码,可能是某个游戏、...
一款增强型完全免费的Bittorrent客户端,主要是为了改进BT下载效率,整合了BitVampire engine v0.3 算法原型,内存和cpu耗用极低,极大提高了下载效率,下载速度更稳定,更节省带宽,连接服务器的性能也得到了极大...
赫尔辛一个POSIX吸血鬼数字生成器,内置了heapsort。该项目的重点是性能,代码可读性和可移植性。 在helsing / configuration.h中,您可以轻松设置线程数,选择算法实现并进行调整,调整详细程度并启用从检查点恢复...
【作品名称】:基于MATLAB实现的一些照片艺术滤镜算法 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。...vampirize 吸血鬼 Warhol
BitTorrent的核心机制是基于“种子”(Seeder)和“吸血鬼”(Leecher)的概念进行文件传输。当一个文件被分割成多个小块后,每个参与下载的用户(Leecher)会随机请求不同的文件块。随着下载的进行,下载完成的用户...
数据结构与算法分析是计算机科学中的核心课程,它探讨如何有效地组织和操作数据,以及设计和分析解决问题的算法。在本资源中,我们有一个以C语言描述的数据结构和算法实现的集合,包括源代码和相应的答案,这为学习...
《吸血鬼黑暗》是一款可能基于C++编程语言开发的游戏或软件项目,其源代码或相关资源被存储在一个名为“VampireDarkness-main”的压缩包中。C++是一种强大而灵活的面向对象的编程语言,它在游戏开发、系统软件、高...
标题中的“C#数字图像处理算法典型实例源代码”表明这是一个包含具体实现的项目,涵盖了多个数字图像处理的经典算法。这些实例通常包括但不限于颜色空间转换、滤波操作、边缘检测、直方图均衡化、特征提取等。 描述...
有多种关于吸血鬼数字的算法 ! 输出结果为: 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的偶数,可以由两个较小的正整数相乘得到,这两个小整数的位数相同,且它们的所有...