吸血鬼数字算法

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

15*93: 1395
21*60: 1260
21*87: 1827

写一个程序找出4位数中的所有吸血鬼数字:

下列解法为Java编程思想提供的参考解法

 1         int[] startDigit = new int[4]; //start digit
 2         int[] productDigit = new int[4];   //product digit
 3         for (int num1 = 10; num1 <= 99; num1++){
 4             for (int num2 = num1; num2 <=99; num2++){
 5                 if ((num1 * num2) % 9 != (num1 + num2) % 9)
 6                     continue;
 7                 int product = num1 * num2;
 8                 startDigit[0] = num1 / 10;
 9                 startDigit[1] = num1 % 10;
10                 startDigit[2] = num2 / 10;
11                 startDigit[3] = num2 % 10;
12                 productDigit[0] = product / 1000;
13                 productDigit[1] = (product % 1000) / 100;
14                 productDigit[2] = product % 1000 % 100 /10;
15                 productDigit[3] = product % 1000 % 100 % 10;
16                 int count = 0;
17                 for (int x = 0; x < 4; x++){
18                     for (int y = 0; y < 4; y++){
19                         if (productDigit[x] == startDigit[y]){
20                             count++;
21                             productDigit[x] = -1;
22                             startDigit[y] = -2;
23                             if (count == 4)
24                                 System.out.println(num1 + " * " + num2 + ":" + product);
25                         }
26                     }
27                 }
28             }
29         }

Vampire Algorithm

提示:

4位吸血鬼数字形式为abcd

1000a  + 100b + 10c + d = (10a + b) + (10c + d)

1000a  + 100b + 10c + d = (10a + c) + (10b + d)

......

无论何种形式, 我们发现多项式中除了三个一位数以外都是10的倍数,所以很容易想到等式两边同时%9,等式仍然成立。

如果%9等式不成立,那么这个数一定不是吸血鬼数字。

时间: 2024-08-27 01:47:54

吸血鬼数字算法的相关文章

吸血鬼数字算法参考 -- javascript版本

// 吸血鬼数字 java编程思想 第四章 75页 练习10 for (var i = 10; i <= 99; i++) { for (var j = i + 1; j < 99; j++) { if (i * j < 1000) continue; var result = (i * j + ''); var regx = new RegExp((i + '') [0] + '|' + (i + '') [1] + '|' + (j + '') [0] + '|' + (j + ''

Java实现4位数吸血鬼数字算法

定义:吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序,以两个0结尾的数字是不允许的.如1260 = 21 * 60,2187 = 27 * 81等. 本例中实现4位数之内的所有吸血鬼数字. 核心代码: public static void main(String[] args) { //吸血鬼数字计数器 int count = 0; //乘积数字 int m = 0; //字符组,匹配用的 char[] a

java吸血鬼数字

很惭愧(其实没什么惭愧,水平就这样),搞了半晌才写出来了一个求四位吸血鬼数字的方法 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序. 以两个0结尾的数字是不允许的,例如,下列数字都是"吸血鬼"数字: 1260 = 21 * 60 1827 = 21 * 87 2187 = 27 * 81 int len = 4; // 求出四位值得范围 int max = (int) (Math.pow(10,

《Thinking in Java》习题——吸血鬼数字

最近在看<Java编程思想>,这本书非常棒,不愧是Java程序员的圣经.看到第四章,后面有道题目很有意思,于是就自己做了做. 1. 我的思路很简单,但是算法效率非常之低.就是把4位数拆成4个数字,比如1260--->1,2,6,0.然后4位数字组合成两个2位数,计算它们 的乘积,相等则就是吸血鬼数字. 1 public class Test2 { 2 /* 3 * 将4位数拆分成4个数 4 * */ 5 public int [] array(int num){ 6 int [] a =

Thinking In Java 里面吸血鬼数字题

首先解释一下吸血鬼数字:吸血鬼数字是指位数为偶数的数字,可由一对数字相乘而得到,这对数字各包含乘积的一半位数的数字,以两个0结尾的数字是不允许的. 四位数吸血鬼数字示例:1260=21*60,1827=21*87,2187=27*81-- 先列出结果:一共7个:1260=21*60,1395=15*93,1435=41*35,1530=51*30,1827=87*21,2187=27*81,6880=86*80 方法一: 本方法是<Thinking in Java>的官方答案,由于所处章节很靠

Java编程思想——吸血鬼数字问题

吸血鬼数字:我最开始想的是把四位数拆开,然后进行自由组合然后相乘,最后比较得到结果,在网上去看了一些朋友的做法,让我大吃一惊啊,想到自己的算法也要好好看了 ,这样子下去是不行滴 现贴出代码: package edu.cqu.main; import java.util.Arrays; /** * 问题描述: * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字, * 其中从最初的数字中选取的数字可以任意排序. * 例如: * 1260 = 21 *

第四章习题:斐波那.契数列&amp;&amp;吸血鬼数字

package com.twoslow.cha4; /** * 斐波那契数列:从3个数字起,每一个数都是前2个数之和:1 1 2 3 5 8 13... * @author sai * */ public class Fibonacci { public static void main(String[] args) { for(int i = 0 ; i < 10 ;i++) { System.out.print(fib(i) + "."); } } public static

【Java】 Thinking in Java 4.8 练习10 吸血鬼数字

题目: 吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘得到,而这对数字各包含成绩的一半位数的数字,其中从最初的数字中选取的数字可以任意排序.  以两个0结尾的数字是不允许的.写一个程序,找出4位数中所有吸血鬼数字. 方法一: 1 public static void main(String[] args) { 2 outer: for (int i = 10; i <= 99; i++) { 3 for (int j = i + 1; j <= 99; j++) { 4 int sum =

JAVA_吸血鬼数字 多种方法实现

package test4; import java.util.Arrays; /** * 从TIJ中第4章的练习10看到"吸血鬼数字",以下几种方法实现以及执行时间对比 * 找出四位数的所有吸血鬼数字 * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字, * 其中从最初的数字中选取的数字可以任意排序. * 以两个0结尾的数字是不允许的. * 例如下列数字都是吸血鬼数字 * 1260=21*60 * 1827=21*87 * 2187=2