`
一口三个汉堡
  • 浏览: 112891 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

吸血鬼算法

阅读更多

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位吸血鬼数字

    在编程领域,"吸血鬼数字"是一种特殊的数字类型,这个概念源于数学,后被引入到编程挑战中,成为一种有趣的算法问题。4位吸血鬼数字是指由四个不同的数字组成,可以分解成两个两位数的乘积,这两个两位数的各位数字...

    Java实现吸血鬼数字

    在这个问题中,我们将探讨如何使用Java编程语言来实现找到所有四位吸血鬼数字的方法,并比较三种不同的算法效率。 首先,我们可以采用暴力枚举法,遍历所有四位数并检查它们是否为吸血鬼数字。这种方法是最直观的,...

    JAVA吸血鬼数字算法

    THINK IN JAVA上的课后题,只是寻找4位数的。

    吸血鬼骑士占卜游戏。

    标题中的“吸血鬼骑士占卜游戏”表明这是一个与热门动漫《吸血鬼骑士》相关的游戏,而游戏的形式则是占卜。占卜游戏通常是指通过某种随机或预先设定的规则来预测或揭示未知信息,这类游戏往往具有娱乐性和趣味性,...

    JAVA求吸血鬼数字

    吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以2个0结尾的数字是不允许的,例如,下列数字都是吸血鬼数字: 1260 ...

    1-10000中的吸血鬼数组合

    在IT领域,"吸血鬼数组合"是一个有趣的数学概念,尤其在计算机编程和算法设计中常常被用作练习或挑战。标题“1-10000中的吸血鬼数组合”指的是寻找1到10000之间满足特定条件的数对,这些数对被称为“吸血鬼数”。在...

    中华吸血鬼----传说中的源码

    【中华吸血鬼----传说中的源码】 "中华吸血鬼"这个名词在IT行业中,可能指的是一个特定的软件项目或者编程作品。由于标题和描述的重复性,我们可以推测这是一份关于“中华吸血鬼”项目的源代码,可能是某个游戏、...

    BTVampire(BT吸血鬼) v1.4

    一款增强型完全免费的Bittorrent客户端,主要是为了改进BT下载效率,整合了BitVampire engine v0.3 算法原型,内存和cpu耗用极低,极大提高了下载效率,下载速度更稳定,更节省带宽,连接服务器的性能也得到了极大...

    找出4位数的所有“吸血鬼”数字多种高效算法详解

    关于吸血鬼数字算法问题,我也是读《java编程思想》中遇到的,觉得很有意思。于是,就去做了做。但因为我的粗心,读题的时候忽略了点问题,所以导致我的思路出现了岔口!(当时的思路就是想着把一个4位数拆分成两个2...

    helsing:POSIX吸血鬼编号生成器

    赫尔辛一个POSIX吸血鬼数字生成器,内置了heapsort。该项目的重点是性能,代码可读性和可移植性。 在helsing / configuration.h中,您可以轻松设置线程数,选择算法实现并进行调整,调整详细程度并启用从检查点恢复...

    数据结构与算法分析:C语言描述源代码+答案.rar )

    数据结构与算法分析是计算机科学中的核心课程,它探讨如何有效地组织和操作数据,以及设计和分析解决问题的算法。在本资源中,我们有一个以C语言描述的数据结构和算法实现的集合,包括源代码和相应的答案,这为学习...

    吸血鬼黑暗

    《吸血鬼黑暗》是一款可能基于C++编程语言开发的游戏或软件项目,其源代码或相关资源被存储在一个名为“VampireDarkness-main”的压缩包中。C++是一种强大而灵活的面向对象的编程语言,它在游戏开发、系统软件、高...

    C#数字图像处理算法典型实例源代码

    标题中的“C#数字图像处理算法典型实例源代码”表明这是一个包含具体实现的项目,涵盖了多个数字图像处理的经典算法。这些实例通常包括但不限于颜色空间转换、滤波操作、边缘检测、直方图均衡化、特征提取等。 描述...

    Vampire Code

    有多种关于吸血鬼数字的算法 ! 输出结果为: 1260 = 21 * 60 1395 = 15 * 93 1435 = 41 * 35 1530 = 51 * 30 1827 = 87 * 21 2187 = 27 * 81 6880 = 86 * 80 6880 = 80 * 86 以上仅供参考:

    xixuegui.zip_Java编程_Java_

    在Java编程领域,"吸血鬼数字"是一个有趣的算法问题,它涉及到数字处理和字符串操作。吸血鬼数字(Vampire Number)是指一个大于1的偶数,可以由两个较小的正整数相乘得到,这两个小整数的位数相同,且它们的所有...

    dorban:Svarog AI库的演示。-开源

    目的是杀死吸血鬼。 或至少以最佳机会攻击他。 Svarog AI库包含一个基于所谓的隐藏变量的新优化算法。 为了实现这一目标,多班将努力说服普雷格(Pregor)陪伴他,他们将一起尝试在具有5个城市节点的图表中找到吸血...

    Vampshade

    "Vampshade",这个名字听起来既神秘又富有故事感,让人不禁联想到哥特式的吸血鬼传说。在这个项目中,我们可以推测它可能是一款以吸血鬼为主题的电子游戏。而作为游戏开发的核心技术,C#语言扮演着至关重要的角色。...

    Dracula-Slayer:我的第一场比赛

    最后,为了使游戏更具挑战性,开发者可能还使用了算法来设计AI(人工智能)控制的吸血鬼。Ruby虽然不是专为高性能计算设计的语言,但其强大的函数式编程特性可以用来编写复杂的行为决策逻辑,让吸血鬼在游戏中展现出...

    netvampire

    "网络吸血鬼"是其别名,形象地表达了它可以从网络上吸取信息的特点。 在使用NetVampire时,用户首先需要确定要下载的网页URL,然后设置相应的下载参数。这些参数可能包括但不限于:是否下载图片和其他媒体资源、...

Global site tag (gtag.js) - Google Analytics