吸血鬼数字(一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。)
来源:互联网 发布:大数据分析系统翻译 编辑:程序博客网 时间:2024/04/30 09:37
首先介绍下吸血鬼数字的特性:
一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。后面是两个0的不算,比如3000=50*60
举例:
*15*93=1395 21*60=1260 21*87=1827*
代码实现
import java.util.Arrays;/** * 一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。 * 比如 1395 =15 * 93 */public class Vampire { public static void main(String[] arg) { String[] ar_str1, ar_str2; int sum = 0; int from; int to; int i_val; int count = 0; // 双重循环穷举,i从10——99,j根据i的值来进行变换,满足i*j在4位数范围内 for (int i = 10; i < 100; i++) { //j=i+1避免重复 //from到to是保证i*j的值在1000-10000之间,保证是4位数 from = Math.max(1000 / i, i + 1); to = Math.min(10000 / i, 100); for (int j = from; j < to; j++) { i_val = i * j; //下面具体分析为何要把(i_val - i - j) % 9 != 0的数字去掉 if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) { continue; } count++; ar_str1 = String.valueOf(i_val).split(""); ar_str2 = (String.valueOf(i) + String.valueOf(j)).split(""); Arrays.sort(ar_str1); Arrays.sort(ar_str2); if (Arrays.equals(ar_str1, ar_str2)) {// 排序后比较,为真则找到一组 sum++; System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val); } } } System.out.println("共找到" + sum + "组吸血鬼数"); System.out.println(count); }}
分析:
假设val = 1000a + 100b + 10c + d, 拆分成val = x * y
而x是a、b、c、d中两个的线性组合,y是另两个的线性组合,系数分别是10和1
则val-x-y
=val-m1*a-m2*b-m3*c-m4*d //m1\m2\m3\m4 是10或者是1
=1000a + 100b + 10c + d-m1*a-m2*b-m3*c-m4*d
=(1000-m1)a+(100-m2)b+(10-m3)c+(1-m4)d
1000-m1等900或者999,能被9整除
100-m2等90或者99,能被9整除
10-m3等0或者9,能被9整除
1-m4等-9或者0,能被9整除
所以(1000-m1)a+(100-m2)b+(10-m3)c+(1-m4)d能被9整除
得到val-x-y能被9整除
文章参考:http://blog.csdn.net/java2000_net/archive/2009/01/23/3851203.aspx
0 0
- 吸血鬼数字(一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。)
- 4位吸血鬼数字
- 找出4位数的所有吸血鬼数字
- 找出4位数的所有吸血鬼数字
- 输入一个四位数,显示出各个位上的数字。例如输入1234,程序可以显示出千位数字为1,百位数字为2,十位数字为3,个位数字为4。
- 4位吸血鬼数字的java实现
- 四位的吸血鬼数字
- 四位吸血鬼数字
- 找出所有的4位数的吸血鬼数字
- java 找出4位数的所有吸血鬼数字
- JAVA找出4位数的所有吸血鬼数字
- 找出四位数的所有吸血鬼数字(JAVA)
- 寻找4位吸血鬼数字 java
- 求4位吸血鬼数字问题
- 4位吸血鬼数字的实现代码与解释
- 将202413.9拆分成一个两位小数的数字和一个2000--3000左右整数的乘积
- 吸血鬼数字的算法
- 吸血鬼数字的算法
- 无法解析的外部符号
- python 正则表达式
- 银行家算法
- 设置navigationBar的title的字体大小与颜色
- 黑马程序员之Map
- 吸血鬼数字(一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。)
- poj 2955 Brackets 【区间dp 入门】
- 集合的交并差(链表)(未完)
- Android Studio——点击事件监听
- Java基础的IO和线程知识
- 结构体例题汇总
- 2009年系统分析师上午试题1-2
- 微软亚洲研究院开源图数据库GraphView
- 回调