Java杂谈篇(一)

  • 【求所有的4位吸血鬼数字】
    • 1、什么是吸血鬼数字?
    • 2、方法思考
      • 2.1、各种方法
      • 2.2、关于上述第二个解决方法的解析
        • 2.2.1、方法详情
        • 2.2.2、方法详解
    • 3、运行结果

【求所有的4位吸血鬼数字】

1、什么是吸血鬼数字?

吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。——百度百科

由于问题只是4位的吸血鬼数字,那么就很明确了,我们需要找的是某一个数字“abcd”,符合以下条件:

  • abcd = ab*cd
  • 以两个0结尾的数字是不允许的

2、方法思考

2.1、各种方法

关于这个问题,各种博客论坛都已有了许许多多的解决方法,以下是我认为比较简洁清晰的解释:

  1. https://blog.csdn.net/u011289652/article/details/73175530
  2. https://bbs.csdn.net/topics/300036468

2.2、关于上述第二个解决方法的解析

这是我搜集到的需要执行运算最少的方法,下面给出我的理解:

2.2.1、方法详情
import java.util.Arrays;
/**  吸血鬼数字;*         一个偶位数字(本题要求为4位),可以拆分为2个该数字位/2的数字的乘积,顺序不限。*/
public class VampireNumbers {public static void main(String[] arg) {String[] ar_str1, ar_str2;int sum = 0;int minInt;int maxInt;int num;int time = 0;for (int i = 10; i < 100; i++) {minInt = Math.max(1000 / i, i + 1);maxInt = Math.min(10000 / i, 100);for (int j = minInt; j < maxInt; j++) {num = i * j;// if (num % 100 == 0 || (num - i - j) % 9 != 0) {continue;}time++;ar_str1 = String.valueOf(num).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 + "=" + num);}}}System.out.println("共找到" + sum + "组吸血鬼数");System.out.println("运算次数:" + time);}
}
2.2.2、方法详解

1、开头的双层循环部分:

  • 先简单的解释maxInt = Math.min(10000 / i, 100);,这个式子中min方法的第二个参数100是作为最大值限制参数j的,第一个参数中的10000/i是为了限制不让i*j大于4位数。但是因为i的范围是10~99,得到的最小值一直是100,所以这段代码也完全可以直接写成maxInt = 100;
  • 其次是关于minInt = Math.max(1000 / i, i + 1);的作用。首先其中的1000 / i的作用就是保证i * j的结果一定能达到四位数,这也起到了筛选的作用,i + 1则是保证了所有的遍历不会出现类似于发现aaaa=xymn的情况后又有aaaa=mnxy的情况。

2、双层循环中的if条件:

  • num % 100 == 0:由于吸血鬼数字不允许出现两个两位数都以0结尾的情况,而这种情况导致的结果就是i*j必然是100的倍数,所以只要把着各种情况筛选出去就能避免,
  • (num - i - j) % 9 != 0:由于四位数abcd是1000a+100b+10c+d,而i和j都是10x+y的格式,那么无论是什么数字的组合,用num - i - j计算的结果都必然是9的倍数,所以把不是的情况筛选出去即可。

3、确认得到的结果:

通过上述的筛选后,基本已经完成了大部分数字的筛选,现在遍历得到的数字都是符合条件的,只要找到所用数字相同的即可。

  • 将四位数转化为字符串并生成字符串数组,将两个两位数转化为字符串并连接,同样生成字符串数组。
 ar_str1 = String.valueOf(num).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))

3、运行结果

Java杂谈——求所有的4位吸血鬼数字相关推荐

  1. java吸血鬼_4位吸血鬼数字的java实现思路与实例讲解

    这个问题来源于java编程思想一书,所谓"吸血鬼数字"就是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数字,其中从偶数位数字中选取的数字可以任意排列. ...

  2. 4位吸血鬼数字的实现代码与解释

    今天在<Java编程思想>第四章中看到一道练习题,写程序找到所有的4位吸血鬼数字.因为第四章是讲控制流程,一开始始终将思路局限于利用循环进行穷举,但越想越复杂,最后查阅了相关资料,总结出了 ...

  3. java 4位数,java 找出4位数的所有吸血鬼数字

    java 找出4位数的所有吸血鬼数字 /** * 找出四位数所有的吸血鬼数字 * 吸血鬼数字:位数为偶数的数字可以由一对数字相乘而得,这对数字包含乘积一半的位数 * 如:1260 = 21*60 */ ...

  4. Java 找出四位数的所有吸血鬼数字 基础代码实例

    /**  * 找出四位数的所有吸血鬼数字  * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序.  * 以两个 ...

  5. Java 四舍五入求百分数 保留两位保留整数

    前言 给定要给Double类型数字,四舍五入求百分数,可以保留整数 两位 0.441876900638 ==>44.19% or 44% 用拓展的方法 操作 //截取double num = D ...

  6. Java基础求质数——接收用户输入的数字,判断是否为质数

    首先,我们要知道质数是什么: 概念:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,也称为素数. 规定:0和1既不是质数,也不是合数,最小的质数为2 思路1:将这个数放在一个循 ...

  7. java中整形_java中怎样实现60多位整形数字的运算

    java中怎样实现60多位整形数字的运算 (2011-09-20 10:57:59) 标签: 杂谈 import java.math.BigInteger; import java.util.Scan ...

  8. java编程找出吸血鬼数字,Java 找到四位数的所有吸血鬼数字 基础代码实例

    Java 找出四位数的所有吸血鬼数字 基础代码实例 /** * 找出四位数的所有吸血鬼数字 * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最 ...

  9. Thinking in Java之吸血鬼数字

      今天学习了Java的流程控制的内容,基本与C语言一样,只不过是Java多了foreach语句的一种用法,相对于C语言来说方便了很多.看了最后一道习题,是关于吸血鬼数字的,比较感兴趣于是就写了代码. ...

最新文章

  1. 用简单的C语言实现多任务轮流切换(模拟操作系统线程机制)【转】
  2. 怎样才算熟悉python-怎么样才算是精通 Python?
  3. Mac-连接Windows远程桌面软件
  4. EntityFramework(EF)贪婪加载和延迟加载的选择和使用
  5. Pytorch 加载预训练模型参数时出现size mismatch错误
  6. FFmpeg的C++封装:FFmpegWrapper
  7. 跨模块中的分配内存问题
  8. Acwing第 34 场周赛
  9. JavaScript中Switch语句支持字符串类型数据
  10. 06_JavaEE回顾笔记Ⅱ
  11. 怎样将excel表格导入天正_天正无法导入excel表格
  12. 屏幕写画和缩放:ZoomIt【转】
  13. 美团上线美团直播助手
  14. Uber面向中印开发者公布SDK,支持第三方应用集成服务
  15. LaTeX--1--了解LaTeX
  16. 使用python和opencv进行人脸识别时遇到cv2.error: OpenCV(4.5.1) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-buil
  17. 手码万字-带你全面了解存储基础知识
  18. 酒店点菜系统c语言,求一个用最基础的C语言编写的简单饭店点菜系统
  19. 如何在Debian 9上安装和使用Docker
  20. 渗透工具之CS4.0使用说明书

热门文章

  1. QKX-ZSZ-4000岩体真三轴动静载荷-应力应变曲线绘制软件
  2. 简单说说 RPC 框架,你 悟到了吗?
  3. docker搭建LNRP环境
  4. 2022年Web 前端怎样入门?最新Web前端入门的学习路线
  5. 云服务器+花生壳+xming+vscode环境搭建(云服务器运行程序,本地进行GUI显示)
  6. 数据挖掘中的机器学习
  7. ubuntu chm文档阅读
  8. linux看物流内核命令,Linux基础命令
  9. 前端实现压缩图片的功能(vue-element)
  10. html中如何将图片3d转换,jpg格式图片如何可以转换成3DMax格式?