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

吸血鬼数字:我最开始想的是把四位数拆开,然后进行自由组合然后相乘,最后比较得到结果,在网上去看了一些朋友的做法,让我大吃一惊啊,想到自己的算法也要好好看了 ,这样子下去是不行滴

现贴出代码:

package edu.cqu.main;

import java.util.Arrays;

/**
 * 问题描述:
 *        吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,
 *   其中从最初的数字中选取的数字可以任意排序。
 * 例如:
 *      1260 = 21 * 60 1827 = 21 * 87 2187 = 27 * 81
 * 要求输出所有四位数的吸血鬼数字。
 *
 * @author Gabby
 *
 */
public class VampireNumber {
	 public static void main(String[] args) {
	        for(int i = 1; i < 100; i++){
	            for(int j = i+1; j < 100; j++){
	                //只要求输出四位数
	                if(i * j >= 1000){
	                    String a = i + "" + j;
	                    String b = i * j + "";
	                    if(equal(a, b)){
	                        System.out.printf("%d * %d = %d", i, j, i*j);
	                        System.out.println();
	                    }
	                }
	            }
	        }
	    }

	    //判断两个字符串包含的数字是否一致
	    private static boolean equal(String a, String b) {
	        //先排序
	        char[] as = a.toCharArray();
	        char[] bs = b.toCharArray();
	        Arrays.sort(as); //排序
	        Arrays.sort(bs); //排序
	        if(Arrays.equals(as, bs)){
	            return true;
	        }
	        return false;
	    }
}

  

时间: 2024-10-15 08:58:54

Java编程思想——吸血鬼数字问题的相关文章

《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编程思想》第十三章 字符串

<Java编程思想>读书笔记 1.String作为方法的参数时,会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置,从未动过. 2.显式地创建StringBuilder允许预先为他指定大小.如果知道字符串多长,可以预先指定StringBuilder的大小避免多次重新分配的冲突. 1 /** 2 * @author zlz099: 3 * @version 创建时间:2017年9月1日 下午4:03:59 4 */ 5 public class UsingStringBuilder {

Java编程思想总结笔记Chapter 2

本章介绍Java程序的基本组成部分,体会到Java中几乎一切都是对象. 第二章   一切都是对象 目录: 2.1 用引用操纵对象 2.2 必须由你创建所有对象 2.3 永远不需要销毁对象 2.4 创建新的数据类型:类 2.5 方法.参数和返回值 2.6 构建一个Java程序 2.7 你的第一个Java程序 2.8 注释和嵌入式文档 2.9 编码风格 2.1 用引用操纵对象 一切都看作对象,操纵的标识符实际上是对象的一个"引用",遥控器(引用)操纵电视机(对象),想调控电视,只需通过遥控

java编程思想第4、5章细节总结

和上次的一样,只是总结下看这本书学习到的新观点或者重点,简单并且提高效率. 第四章   控制执行流程 1.java中不允许一个数字当做布尔值来使用,而在C或者C++中可以 2.java中唯一用到逗号的地方就是for循环的控制表达式 3.for循环可以定义多个变量,但是这些变量必须要有相投的类型 4.要熟练使用for--each循环 5.break退出整个循环,continue退出当前循环 6.switch的case后面一定要跟上break'语句(有一次出bug就是因为粗心没有加上break) 第

71.JAVA编程思想——JAVA与CGI

71.JAVA编程思想--JAVA与CGI Java 程序可向一个服务器发出一个CGI 请求,这与HTML 表单页没什么两样.而且和HTML 页一样,这个请求既可以设为GET(下载),亦可设为POST(上传).除此以外,Java 程序还可拦截CGI 程序的输出,所以不必依赖程序来格式化一个新页,也不必在出错的时候强迫用户从一个页回转到另一个页.事实上,程序的外观可以做得跟以前的版本别无二致. 代码也要简单一些,毕竟用CGI 也不是很难就能写出来(前提是真正地理解它).所以我们准备办个CGI 编程

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla

66.JAVA编程思想——网络编程

66.JAVA编程思想--网络编程 历史上的网络编程都倾向于困难.复杂,而且极易出错. 程序员必须掌握与网络有关的大量细节,有时甚至要对硬件有深刻的认识.一般地,我们需要理解连网协议中不同的"层"(Layer).而且对于每个连网库,一般都包含了数量众多的函数,分别涉及信息块的连接.打包和拆包:这些块的来回运输:以及握手等等.这是一项令人痛苦的工作.但是,连网本身的概念并不是很难.我们想获得位于其他地方某台机器上的信息,并把它们移到这儿:或者相反.这与读写文件非常相似,只是文件存在于远程

64.JAVA编程思想——优先级

64.JAVA编程思想--优先级 线程的优先级(Priority)告诉调试程序该线程的重要程度有多大.如果有大量线程都被堵塞,都在等候运行,调试程序会首先运行具有最高优先级的那个线程.然而,这并不表示优先级较低的线程不会运行(换言之,不会因为存在优先级而导致死锁).若线程的优先级较低,只不过表示它被准许运行的机会小一些而已. 可用getPriority()方法读取一个线程的优先级,并用setPriority()改变它.在下面程序中,大家会发现计数器的计数速度慢了下来,因为它们关联的线程分配了较低

Java编程思想总结笔记Chapter 3

本章需要总结的不多,但细节的东西需要注意,有些很容易遗忘. 第三章 目录: 3.1 更简单的打印语句 3.2 使用Java操作符 3.3 优先级 3.4 赋值 3.5 算数操作符 3.6 自动递增和递减 3.7 关系操作符 3.8 逻辑操作符 3.9 直接常量 3.10 按位操作符 3.11 移位操作符 3.12 三元操作符 if-else 3.13 字符串操作符 + 和 += 3.14 使用操作符时常犯的错误 3.15 类型转换操作符 3.16 Java没有sizeof 3.17 操作符小结