文档章节

吸血鬼数字

fantasiter
 fantasiter
发布于 2015/08/31 21:12
字数 609
阅读 52
收藏 0
在看<Java编程思想>,看到了第四章了,里边有道题,选出所有四位数的“吸血鬼数”,所谓"吸血鬼数",指的是,这个数是由组成它的四位数字分成两组,每组都是两位数,这两组数相乘以后,最终又得到了这个数,这就是吸血鬼数。
先上我的写法吧,低效但是思路明确,不过实在是简陋:

/**
 * 求四位数吸血鬼数字
 * @author lenovo
 *
 */
public class BloodSukerNumber {
	public static void main(String[] args) {
		long startTime = System.currentTimeMillis();
		for (int i = 999; i < 10000; i++) {
			final int[] array = setABCD(i);
			//0,1,取数组第一跟第二个作为,第一个两位数,四个数的排列顺序由arrayMulti方法实现
			if(arrayMulti(array[0], array[1], array[2], array[3],i))
				{
					System.out.println(i);
					continue;
				};
			//0,2
			if(arrayMulti(array[0], array[2], array[1], array[3],i))
			{
				System.out.println(i);
				continue;
			};
			//0,3
			if(arrayMulti(array[0], array[3], array[1], array[2],i))
			{
				System.out.println(i);
				continue;
			};
			//1,2
			if(arrayMulti(array[1], array[2], array[0], array[3],i))
			{
				System.out.println(i);
				continue;
			};
			//1,3
			if(arrayMulti(array[1], array[3], array[0], array[2],i))
			{
				System.out.println(i);
				continue;
			};
			//2,3
			if(arrayMulti(array[2], array[3], array[0], array[1],i))
			{
				System.out.println(i);
				continue;
			};
		}
		long endTime = System.currentTimeMillis();
		System.out.println((endTime-startTime)+"");
	}
	
   //x是一个四位数,返回各个位上的数字组成的数组,ABCD对应数组的0123
	public static int[] setABCD(int x)
	{
		int [] array = new int[4];
		array[3] = x%10;
		array[2] = (x%100-array[3])/10;
		array[1] = (x%1000-array[2]*10-array[3])/100;
		array[0] = (x-array[1]*100-array[2]*10-array[3])/1000;
		return array;
	}
	
	//数组分组,分成两个两位数相乘,并判断相乘结果是否跟四位数i相同
	public static boolean arrayMulti(int m,int n,int x,int y,int i)
	{
		return (m*10+n)*(x*10+y)==i||(m*10+n)*(y*10+x)==i||(n*10+m)*(x*10+y)==i||(n*10+m)*(y*10+x)==i;
	}
}

我的方法,感觉分类清晰一点,是个笨办法,耗时是3毫秒。下面上一个别人写的,感觉写的很好,不过貌似执行时间比我的长,用时33毫秒,但是更接近Java本质的用法,程序思维运用的很好
import java.util.Arrays;


public class BloodNum {
	public static void main(String[] args) {
		long startTime = System.currentTimeMillis();
		String[] m;
		String [] mMulti;
		for (int i = 10; i < 100; i++) {
			for (int j = i+1; j < 100; j++) {
				m = String.valueOf(i*j).split("");
				mMulti = (String.valueOf(i)+String.valueOf(j)).split("");
                                //对两个数组进行排序,用于后面对比,数组组成的元素是否是一样的
				Arrays.sort(m);
				Arrays.sort(mMulti);
				if (Arrays.equals(m, mMulti)) {
					System.out.println(i*j+"");
				}
			}
		}
		long endTime = System.currentTimeMillis();
		System.out.println((endTime-startTime)+"");
	}
}

© 著作权归作者所有

fantasiter
粉丝 1
博文 117
码字总数 24978
作品 0
青岛
私信 提问
《Java编程思想》第四版读书笔记 第四章

4.3 逗号操作费仅用于for循环控制表达式的初始化部分和步进控制部分。初始化部分用于定义任意多个具有相同类型的变量: for(int i =1, j = i + 10; i <5; i++, j = i* 2) for循环控制表达式可...

一万
2016/05/02
136
0
由“吸血鬼数字”引发的关于算法的思考

今天看Thing in java的第四章有个小练习是找出4位数的所有吸血鬼数字( 一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。)自己写了个递归的实现,虽然是正确的,但感觉不满意,效率太低...

绝影jy
2014/05/07
1K
2
程序员学学智力题

程序员学学智力题 关于智力题的心得:一般来说: - 题目语句中出现提示“无法确定”的情况,证明该组合有2个以上的可能性,这是一个关键切入点 - 有些题目采用“负负得正”的解放,这是一个隐...

cjh94520
2017/04/26
0
0
找出吸血鬼数字

import java.util.Arrays;import java.util.HashMap;import java.util.Map;public class TestVampireNumber { public static void main(String[] args) { StringBuilder sb=new StringBuilde......

liuhuics10
2015/08/27
95
0
swf破解扫盲教程-内存抓取法破解swf加壳

swf破解扫盲教程-内存抓取法破解swf加壳 5小时前   前言:之前作了两个swf加壳试验   http://flash.9ria.com/thread-44239-1-1.html   http://flash.9ria.com/thread-45096-1-1.html, ...

付翔
2011/10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用原生js对表格排序

本文转载于:专业的前端网站➸用原生js对表格排序 阿里的模拟笔试题,当时时间有限没写出来,其实是因为自己对原生dom操作不熟悉,这里补一下。 题目的大意是有一个表格,如代码所示 <table>...

前端老手
36分钟前
5
0
IT兄弟连 HTML5教程 HTML5表单 HTML5新增表单元素

HTML5有一些新的表单元素:<datalist>、<keygen>、<output>。不是所有的浏览器都支持HTML5新的表单元素,但即使浏览器不支持该表单属性,仍然可以显示为常规的表单元素。 1 <datalist>元素 ...

老码农的一亩三分地
37分钟前
4
0
【朝花夕拾】Android自定义View篇之(一)View绘制流程

https://www.cnblogs.com/andy-songwei/p/10955062.html

shzwork
39分钟前
5
0
Qt编写自定义控件70-扁平化flatui

一、前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产...

飞扬青云
49分钟前
3
0
教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部