记一次简单高效的吸血鬼算法

  • 什么是吸血鬼数字
  • 获取四位数的吸血鬼数字的代码实现
  • 输出结果
  • 代码分析

什么是吸血鬼数字

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

  • 例如下列数字都是吸血鬼数字
    1260=21 * 60
    1827=21 * 87
    2187=27 * 81

获取四位数的吸血鬼数字的代码实现

public class Test {public static void main(String[] args) {//初始化比较次数int i = 0;//a是第一个一半位数的数字for (int a = 10; a < 100; a++) {//b是第二个一半位数的数字for (int b = a; b < 100; b++) {//两个一半位数的数字的乘积int result = a * b;//判断是否符合条件需求//result > 9999 || result < 1000 判断是否是四位数//result % 100 == 0 判断最后两位数是否是:00//(result - a - b) % 9 != 0 判断是否可以被9整除(这个判断是在网上看到别人介绍的)if ((result > 9999 || result < 1000) || result % 100 == 0 || (result - a - b) % 9 != 0) {continue;}//创建乘积的字符集合List<Character> resultList = String.valueOf(result).chars().mapToObj(c -> (char) c).collect(Collectors.toList());//创建第一个一半位数的数字的字符集合List<Character> aList = String.valueOf(a).chars().mapToObj(c -> (char) c).collect(Collectors.toList());//创建第二个一半位数的数字的字符集合List<Character> bList = String.valueOf(b).chars().mapToObj(c -> (char) c).collect(Collectors.toList());//往乘积字符集合移除第一个一半位数的数字的字符集合的成员resultList.remove(aList.get(0));resultList.remove(aList.get(1));//往乘积字符集合移除第二个一半位数的数字的字符集合的成员resultList.remove(bList.get(0));resultList.remove(bList.get(1));//如果乘积集合的成员全部移除,则说明为吸血鬼数字if (resultList.size() == 0) {//输出吸血鬼数字System.out.println(a + " * " + b + " = " + result);}//自增比较次数i++;}}//输出比较次数System.out.println("比较次数:  " + i);}
}

输出结果

代码分析

因为这里要的是一个四位数,所以根据阶层:4 * 3 * 2 * 1 = 24,可以知道一共有24种排列方式

下面罗列其中一部份的情况

假设:
result = 1000x + 100y + 10z + k
(1)a = 10x + y        b=10z + k result - a - b = 990x + 99y
(2)a = 10x + y        b=10k + z result - a - b = 990x + 99y + 9z - 9k
(3)a = 10x + z        b=10y + k result - a - b = 990x + 90y + 9z
(4)a = 10x + z        b=10k + y result - a - b = 990x + 99y + 9z - 9k
(5)a = 10x + k        b=10y + z result - a - b = 990x + 90y + 9z
(6)a = 10x + k        b=10z + y result - a - b = 990x + 99y
(7)a = 10y + x        b=10z + k result - a - b = 999x + 90y
(8)a = 10y + x        b=10k + z result - a - b = 999x + 90y + 9z - 9k
......
(24)a = 10k + x       b=10y + z result - a - b = 999x + 90y + 9z - 9k
同时需要满足:
result = a * b

观察上面数据,经过分析和推敲,可以得知:result - a - b可以被9整除,所以如果:(result - a - b) % 9 != 0,则说明条件不符合要求!

记一次简单高效的吸血鬼算法相关推荐

  1. 基建互联 | 安霸与飞桨深度合作,高性能算法落地简单高效!

    面对人工智能算法在端侧落地的需求,安霸在芯片产品线.工具链和软件开发包上都提供了完整成熟的解决方案.人工智能芯片CV2x系列提供了丰富多样的算力平台,完美适配从消费领域的智能门铃,工业安防领域的智能交 ...

  2. 青源 LIVE 预告 | 北大王一飞:高效 GAN 采样算法 (ECML 最佳论文解读)

    近期北京大学林宙辰教授所带领的 ZERO 实验室获得了 ECML-PKDD 机器学习方向最佳论文奖(因为一作是学生,同时也是最佳学生论文.) 论文标题: Reparameterized Samplin ...

  3. NeurIPS 2020 | 一种基于动作采样的简单高效的正则化强化学习方法

    编者按:现有的强化学习方法通常通过熵正则化的方式控制最优策略的随机性,以保证训练过程中的良好探索以及目标策略的鲁棒性.然而,熵正则化的强化学习方法通常会面临表达能力有限的策略结构和复杂低效的训练过程之 ...

  4. 论文浅尝|简单高效的知识图谱表示学习负样本采样方法

    笔记整理 | 陈名杨,浙江大学在读博士生,主要研究方向为知识图谱表示学习 Introduction 研究知识图谱表示学习(KnowledgeGraph Embedding)可以解决当前很多应用的基本问 ...

  5. MOTChallenge榜单第一!用于多目标跟踪简单高效的数据关联方法 BYTE

    关注公众号,发现CV技术之美 本文获作者授权转载自知乎: https://zhuanlan.zhihu.com/p/421264325? 本文主要介绍一下我们最近的一篇工作: ByteTrack: M ...

  6. 【Flink】Apache Flink 1.13.0 正式发布,流处理应用更加简单高效

    1.概述 转载:Apache Flink 1.13.0 正式发布,流处理应用更加简单高效 侵权可删,这里是做个笔记,防止找不到. Flink 1.13 发布了!Flink 1.13 包括了超过 200 ...

  7. 两种简单高效的“反人脸识别”方法

    Bakunov开始在工作时间,研究如何防止被人脸识别.日前,他公开表示自己已经与其他几个黑客一起,开发出了一种"反人脸识别算法". Grigory Bakunov是俄罗斯搜索巨头Y ...

  8. 简单高效有用的正则表达

    简单高效有用的正则表达 正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子.本集讲解正则表达式. 0. 举例 一个正则表达式是一种从左到右匹配主体字符串的模式.& ...

  9. 简单高效的图片降噪方法

    图片降噪在很多场合下都要使用到,譬如我遇到的医疗产品. 计算机通过USB口从医疗产品中获取图像,但由于硬件的原因,清晰度一直不够,有很多噪点. 降噪不可避免.降噪算法就是主要问题了. 下面介绍一种简单 ...

最新文章

  1. 厉害!这位北科大博士生,4年9篇SCI一作
  2. Linux进程突然挂死,当主进程突然死亡时,我该如何杀死linux spawnProcess?
  3. 安卓如何调出软键盘_如何系统学习手机摄影?这张思维导图告诉你
  4. 使用NeMo快速入门NLP、实现机器翻译任务,英伟达专家实战讲解,内附代码
  5. java发送get post请求_【工具】java发送GET、POST请求
  6. C语言(CED)编写一个程序,求两个字符之间的加减运算。
  7. 2457: 很简单的一道题
  8. 修改sql服务器排序规则,SQL SERVER数据库服务器排序规则修改
  9. ASP.NET Core 2.1 源码学习之 Options[2]:IOptions 【转】
  10. Java — 【报错】Parameter index out of range (1 number of parameters, which is 0).
  11. java基础 内部类详解
  12. java程序(1016)
  13. springboot 整合 storm 无法使用注解获取 Ioc 里的 bean,获取不到 spring 上下文 applicationContext
  14. 苹果/微软/特斯拉的产品美学——向丑而生?
  15. 常见数学公式和符号的英文读法大全
  16. 如何落户北京?19年积分落户规模为6000人!
  17. JavaScript执行顺序分析
  18. php if相关标签,dedecms模板中运用dede标签时使用php和if判断语句的方法
  19. Linux音视频学习--常见的音视频传输协议及基本概念介绍
  20. P6跨级晋升P8再到P10,我的11年成长之路

热门文章

  1. 东航电商前端技术周刊第二期20180608
  2. 韩语 计算机术语,韩语计算机、互联网术语(1)
  3. ui标注android ios,IOS+ANDROID的UI切图与标注方法
  4. 超级内存NVDIMM
  5. 生动形象解释虚数的意义
  6. oracle与sql语句
  7. line-rate 线速
  8. 【Vue学习总结】22.使用Mint UI的infinite-scroll实现上拉分页加载
  9. 人体自身的神奇补肾法 ——你在外面花多少钱都学不到的
  10. uefi与win8 (根据网络资料整理)