Thinking in Java之吸血鬼数字

news/2024/10/23 9:40:24/

  今天学习了Java的流程控制的内容,基本与C语言一样,只不过是Java多了foreach语句的一种用法,相对于C语言来说方便了很多。看了最后一道习题,是关于吸血鬼数字的,比较感兴趣于是就写了代码。但是我这个属于暴力求解,复杂度很高,不知道有没有更简单一点的方法,有待以后改进。
  吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排列。以两个0结尾的数字是不允许的,例如,下列数字都是吸血鬼数字:
1260 = 21 * 60;1827 = 21 * 87;2178 = 27 * 81。
示例代码:

public class VampireNum
{public static void main(String[] args){int a,b,c,d;int sum = 0;for(int i = 1001;i < 10000;i++){if(i % 100 == 0)continue;sum = i;a = sum / 1000;sum %= 1000;b = sum / 100;sum %= 100;c = sum / 10;sum %= 10;d = sum;if((a * 10 + b) * (c * 10 + d) == i){System.out.println("i = " + i + ":" + (a*10 + b) +"*" + (c * 10 + d));continue;}if(i == (a * 10 + b) * (d * 10 + c)){System.out.println("i = " + i + ":" + (a*10 + b) +"*" + (d * 10 + c));continue;}if(i ==(b * 10 + a) * (c * 10 + d)){System.out.println("i = " + i + ":" + (b*10 + a) +"*" + (c * 10 + d));continue;}if(i == (b * 10 + a) * (d * 10 + c)){System.out.println("i = " + i + ":" + (b*10 + a) +"*" + (d * 10 + c));continue;}if(i == (a * 10 + c) * (b * 10 + d)){System.out.println("i = " + i + ":" + (a*10 + c) +"*" + (b * 10 + d));continue;}if(i == (a * 10 + c) * (d * 10 + b)){System.out.println("i = " + i + ":" + (a*10 + c) +"*" + (d * 10 + b));continue;}if(i == (c * 10 + a) * (b * 10 + d)){System.out.println("i = " + i + ":" + (c*10 + a) +"*" + (b * 10 + d));continue;}if(i == (c * 10 + a) * (d * 10 + b)){System.out.println("i = " + i + ":" + (c*10 + a) +"*" + (d * 10 + b));continue;}if(i == (a * 10 + d) * (b * 10 + c)){System.out.println("i = " + i + ":" + (a*10 + d) +"*" + (b * 10 + c));continue;}if(i == (a * 10 + d) * (c * 10 + b)){System.out.println("i = " + i + ":" + (a*10 + d) +"*" + (c * 10 + b));continue;}if(i == (d * 10 + a) * (c * 10 + b)){System.out.println("i = " + i + ":" + (d*10 + a) +"*" + (c * 10 + b));continue;}if(i == (d * 10 + a) * (b * 10 + c)){System.out.println("i = " + i + ":" + (d*10 + a) +"*" + (b * 10 + c));continue;}}}
}

  这段代码给出了求4位数的所有吸血鬼数字。采用的方法很笨,就是列举所有可能的组合,看得到的结果是否正确,正确则输出。这段代码只能用于求4位数的所有吸血鬼数字,对于求6位数、8位数以及更多的位数的吸血鬼数字不适用。目前我还没有相处更好的解决方案。先把第一版代码放上吧,后续如果想到了更好的方案再更新。
运行结果为:

  今天的“Java从入门到放弃”就到这了,不知道明天会不会继续。但是学习真的很有成就感,即使学到的这些东西可能用处不是特别大,但自己开心就好!


http://www.ppmy.cn/news/889228.html

相关文章

java吸血鬼数字_[求助]吸血鬼数字

[求助]吸血鬼数字 public class xixuegui { public static void main (String[] args) { int i,j,k,a,b,c,d,n,m; for(i1001;i<9999;i){ ai/1000; b(i-a*1000)/100; c(i-a*1000-b*100)/10; di-a*1000-b*100-c*10; for(j1;j<10;j){ for(k0;k<10;k){ if(i(j*1000)(k*100…

四位吸血鬼数

四位吸血鬼数算法 题目来自《Thinking in Java》第四版&#xff0c;第四章最后一道练习题。 下面是我的代码&#xff1a; public static void main(String args[]) { long t1 System.currentTimeMillis();int number 0;int[] combo new int[4];left:for(int left11;left&…

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

记一次简单高效的吸血鬼算法 什么是吸血鬼数字获取四位数的吸血鬼数字的代码实现输出结果代码分析 什么是吸血鬼数字 吸血鬼数字是指位数为偶数的数字&#xff0c;可以由一对数字相乘而得到&#xff0c;而这对数字各包含乘积的一半位数的数字&#xff0c;其中从最初的数字中选…

Java 实现四位数的吸血鬼算法

public class Main {public static void main(String[] args) {int[] startDigit new int[4];int[] productDigit new int[4];// 可以判断: 两个数只有两位数字,num1和num2代表这两个数for (int num1 10; num1 < 99; num1) {for (int num2 num1; num2 < 99; num2) {/…

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

这个问题来源于java编程思想一书&#xff0c;所谓“吸血鬼数字”就是指位数为偶数的数字&#xff0c;可以由一对数字相乘而得到&#xff0c;而这对数字各包含乘积的一半位数字&#xff0c;其中从偶数位数字中选取的数字可以任意排列。例如&#xff1a; 126021*60&#xff0c;18…

java 吸血鬼数字(四位数)

Java 编程思想 练习10. 吸血鬼数字 题目的具体内容在注释里面。 虽然这个题目所属的区块是switch关键字&#xff0c; 但是不知道如何运用。 下面是代码&#xff0c;没算法&#xff0c;brute force。 /** 吸血鬼数字 位数为偶数的数字&#xff0c;可以由一对数字相乘得到&am…

吸血鬼数字 java_找出吸血鬼数(Java)

importjava.util.ArrayList;importjava.util.Arrays;/*** 先从1001开始到9999开始判断&#xff0c;是否能分解为两个二位数&#xff0c;如果可以&#xff0c;二维数是否包含所有四个数字 * 把四位数分解成二位数乘积过于麻烦&#xff0c;而且一个四位数可能存在多种分解方式&am…

吸血鬼数的查找算法

《Thinking in JAVA》第四章第十题 原题&#xff1a; 吸血鬼数字是指位数为偶数的数字&#xff0c;可以由一堆数字想乘而得到。而这对数字各包含乘积的一半位数的数字&#xff0c;其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的&#xff0c;例如&…