Java - 吸血鬼数字

吸血鬼数字是指位数是偶数的数字, 由一对相乘的数字得到, 而且每个数字包含乘积一半位数的数字.

如:

1092: 12*91

1207: 17*71

1250: 25*50

1260: 21*60

1275: 17*75

1278: 18*71

1325: 25*53



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

//: Main.java

import java.util.ArrayList;

/**
 * 吸血鬼数字
 */
class Main {

    public static boolean vampire(int num) {
        String snum = Integer.toString(num);
        char[] ac = snum.toCharArray();

        // 拼接两个数
        ArrayList<String> as = new ArrayList<String>();
        for (int i=0; i<ac.length; ++i) {
            for (int j=0; j<ac.length; ++j) {
                if (j == i) continue;
                String tmp = ""+ac[i] + ac[j];
                as.add(tmp);
            }
        }

        // 转换数字
        int[] ai = new int[as.size()];
        for (int i=0; i<as.size(); ++i) {
            ai[i] = Integer.valueOf(as.get(i));
        }

        // 验证吸血鬼数字
        for (int i=0; i<as.size(); ++i) {
            for (int j=0; j<as.size(); ++j) {
                if (j == i) continue;
                if (ai[i] * ai[j] == num) {
                    System.out.println(num + ": " + ai[i] + "*" + ai[j]);
                    return true;
                }
            }
        }
        return false;
    }

    public static void main(String[] args) {
        for (int i=1000; i<10000; ++i) {
            vampire(i);
        }
    }
}
/**
 * Output:
 1092: 12*91
 1207: 17*71
 1250: 25*50
 1260: 21*60
 1275: 17*75
 1278: 18*71
 1325: 25*53
 ...
 *///:~


版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-13 08:54:49

Java - 吸血鬼数字的相关文章

java吸血鬼数字

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

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】 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 =

《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 =

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

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

Java 找出四位数的全部吸血鬼数字 基础代码实例

/** * 找出四位数的全部吸血鬼数字 * 吸血鬼数字是指位数为偶数的数字,能够由一对数字相乘而得到,而这对数字各包括乘积的一半位数的数字,当中从最初的数字中选取的数字能够随意排序. * 以两个0结尾的数字是不同意的. *   比例如以下列数字都是吸血鬼数字 1260=21*60 1827=21*87 2187=27*81 ... * 比較笨的低效率的做法: 遍历全部四位数, 每生成一个四位数的时候, *         在双重循环遍历两位数,在两位数的内层循环中推断是否与最外层循环的四位数相等

【Java编程思想 - 练习】吸血鬼数字

Thinking in Java 这个程序我自己敲出来的代码,用的方法很笨的感觉,将就着吧,目前没时间想那么多,得继续学啊. 1 class Vnum{ 2 public static void main(String args[]){ 3 CheckVampire cVampire = new CheckVampire(); 4 for(int i=1000;i<10000;i++){ 5 if(cVampire.isVampire(i)){ 6 System.out.println(i);

《java编程思想》读后笔记:二,吸血鬼数字

书本p75中一道读后练习思考题,题目如下: 吸血鬼数字是指位数为偶数的数字,可以有一对数字相乘得到,而这对数字各包含成绩的一半位数的数字,其中从最初的数字中选取的数字可以任意排序.一两个0结尾的数字是不允许的,例如,下列数字都是"吸血鬼数字": 1260=21*60,1827=21*87,2187=27*81 写一个程序,找出4位数的所有吸血鬼数字. 个人代码: public static void main(String[] args) { Map<String,String&

【Java】求所有四位吸血鬼数字

1 package com.xt.homework.tools; 2 /** 3 * 4 * 7. 题目 5 * 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘得到, 6 * 而这对数字的位数是原数字的一半位数,并且由组成原数字的各个位数组成, 7 * 以两个0结尾的数字不是吸血鬼数字. 8 * 例如:1260 = 21 * 60 1827 = 21 * 87 2187= 27 * 81 9 * 求所有四位吸血鬼数字 10 * 11 * @author 天耀二期 12 * 杨勃隆 13 */