提前声明. 此算法来自 【老紫竹】.
老紫竹CSDN ID:
java2000_net
主页
http://www.laozizhu.com
废话不多说.直接上代码
package com.javaeye.arrick.util;
import java.util.Arrays;
/**
* 吸血鬼数字,高效率版本.<br>
* 一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。<br>
* 比如 1395 =15 * 93
*
* @author 老紫竹(laozizhu.com)
*/
public class VampireNumber {
public static void main(String[] arg) {
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); //返回两个int值中较大的一个
to = Math.min(10000 / i, 100); //返回两个int值中较小的一个
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)) {
// 排序后比较,为真则找到一组
// 返回两个Objects数组彼此相等,返回true
sum++;
System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val);
}
}
}
System.out.println("共找到" + sum + "组吸血鬼数");
System.out.println(count);
}
}
运行结果
第1组: 15*93=1395
第2组: 21*60=1260
第3组: 21*87=1827
第4组: 27*81=2187
第5组: 30*51=1530
第6组: 35*41=1435
第7组: 80*86=6880
共找到7组吸血鬼数
232
count 次数只有232.. 已经算是最高效的了.
而主要的高效代码 只有3行代码
if (i_val % 100 == 0 ||(i_val - i - j) % 9 != 0) {
continue;
}
而已
i_val % 100 -->都明白什么意思.
(i_val - i -j) % 9 !=0 --> 也许一时想不明白.
请看如下逻辑. 你会一目了然
算法解释:
假设
i_val = 1000a + 100b + 10c + d,
因为满足i_val = x * y,
则有x = 10a + b, y = 10c + d
则i_val - x - y = 990a + 99b + 9c = 9 * (110a + 11b + c)
所以i_val - x - y能被9整除。
所以满足该条件的数字必定能被9整除,所以可以直接过滤其他数字。
完毕.
《Thinking in Java》 (Dan Forhan推荐练习代码)
分享到:
相关推荐
在编程领域,"吸血鬼数字"是一种特殊的数字类型,这个概念源于数学,后被引入到编程挑战中,成为一种有趣的算法问题。4位吸血鬼数字是指由四个不同的数字组成,可以分解成两个两位数的乘积,这两个两位数的各位数字...
### 吸血鬼数字的理解与计算 #### 一、什么是吸血鬼数字? 吸血鬼数字(Vampire number)是一种有趣的数学概念,属于娱乐数学的一部分。一个标准的n位数称为一个n阶吸血鬼数字,如果它可以表示为两个n/2位数相乘的...
在这个问题中,我们将探讨如何使用Java编程语言来实现找到所有四位吸血鬼数字的方法,并比较三种不同的算法效率。 首先,我们可以采用暴力枚举法,遍历所有四位数并检查它们是否为吸血鬼数字。这种方法是最直观的,...
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如,下列数字都是“吸血鬼”数字...
吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以2个0结尾的数字是不允许的,例如,下列数字都是吸血鬼数字: 1260 ...
THINK IN JAVA上的课后题,只是寻找4位数的。
Save The Vampire 拯救吸血鬼 - Unity建造吸血鬼城堡逃脱游戏项目源码C# 支持Unity版本2019.427f1及以上 概述 拯救吸血鬼是一款大胆的游戏,你以疯狂的速度在城堡的路径上奔跑,通过选择路径图案来建造最大的城堡...
吸血鬼数字的三种实现方法,及其运行速度。最后一种绝对的好方法。java编程吸血鬼数字答案。
吸血鬼算法是指一种特殊的算法,它可以将一个数字分解成两个相同长度的数字乘积。这种算法通常用于解决某些特殊的数学问题。 在给定的代码中,我们可以看到作者使用Java语言编写了一个吸血鬼算法。该算法的主要思想...
在IT领域,"吸血鬼数组合"是一个有趣的数学概念,尤其在计算机编程和算法设计中常常被用作练习...此外,这个话题还可以激发对数字性质、位运算以及高效算法设计的兴趣,对于提升编程思维和问题解决能力都有一定的帮助。
用鼠标点击左边的定位器不要松手,然后移动到目标窗口,松手,FLASh吸血鬼将对目标进行搜索,为你找出所有可用的FLASHFlash吸血鬼2.4是在2.3版的基础上优化了搜索技术,实现了更快的搜索速度,经过测试,目标进程中...
**SWF吸血鬼:专业下载网页Flash文件的利器** 在互联网早期,Flash技术曾广泛应用于网站设计,尤其是动画和游戏领域。为了便于用户离线欣赏这些内容,开发者们创造了一系列工具,其中“SWF吸血鬼”就是一款专注于...
中华吸血鬼新的代码.rar中华吸血鬼新的代码.rar中华吸血鬼新的代码.rar中华吸血鬼新的代码.rar中华吸血鬼新的代码.rar中华吸血鬼新的代码.rar中华吸血鬼新的代码.rar中华吸血鬼新的代码.rar中华吸血鬼新的代码.rar...
标题中的“吸血鬼骑士占卜游戏”表明这是一个与热门动漫《吸血鬼骑士》相关的游戏,而游戏的形式则是占卜。占卜游戏通常是指通过某种随机或预先设定的规则来预测或揭示未知信息,这类游戏往往具有娱乐性和趣味性,...
《Survivor.IO》是一款以吸血鬼幸存者为主题的独立游戏,其源码为我们提供了深入理解游戏开发过程和实现机制的机会。在这个项目中,开发者并未包含与“dots”相关的部分,这可能意味着游戏的核心逻辑、画面渲染或者...
Flash吸血鬼是一个用于吸取Flash的工具,它可以帮助您从应用程序或者浏览器中获得受保护的Flash。 不论您想得到的Flash采用何种方式保护,Flash吸血鬼都能轻松的把它吸出来,您只需用Flash吸血鬼的定位器锁定需要...
《Flash吸血鬼》是一款专为处理Adobe Flash文件而设计的工具,尤其在去除水印方面表现出色。这款软件以其高效、便捷和无需安装的特点深受用户喜爱。在提供的压缩包"Flash吸血鬼(无水印版)zhxin.rar"中,包含的主要...
3. **算法和数据结构**:源码中的函数和方法往往包含了一系列的算法,通过对这些算法的理解,我们可以学习到如何高效地处理数据和解决问题。 4. **编程风格和规范**:源码反映了开发者的编程习惯和团队的编码规范,...