您的位置:首页 > 编程语言 > Java开发

thnk in java上有趣的算法题1 吸血鬼数字

2015-12-26 00:00 281 查看
摘要: 吸血鬼数字是指位数为偶数的数字,可以由一对数字相乘而得到,而这对数字各包含乘积的一半位数的数字,其中从最初的数字中选取的数字可以任意排序。以两个0结尾的数字是不允许的,例如:1260 = 21*60,1827 = 21*87,2187 = 27*8。

package Homework;

import java.util.Arrays;

public class t7 {

public static void main(String[] args) {
String[] ar_str1, ar_str2;

int sum = 0;
int from;
int to;
int i_val; //用来接收乘积
int count = 0;
// 双重循环穷举
for (int i = 10; i < 100; i++) {
// j=i+1避免重复

from = Math.max(1000 / i, i + 1);
to = Math.min(10000 / i, 100);
System.out.print(i+" ");
for (int j = from; j < to; j++) {
i_val = i * j;

// i_val%100==0
// 吸血鬼数字的两个因子不能同时以0结尾,故用条件i_val % 100 == 0 先过滤一次。
// (i_val - i - j) % 9 != 0)
// 如果其是吸血鬼数字,其两个因子是i和j,那么i+j只能有以下六种情况:
// 1.(i+j)=10a+b+10c+d
// 2.(i+j)=10a+10b+c+d
// 3.(i+j)=10a+b+c+10d
// 4.(i+j)=a+10b+c+10d
// 5.(i+j)=a+10b+10c+d
// 6.(i+j)=a+b+10c+10d
// 所以无论上述的哪种情况下i_val-(i+j)都一定能被9整除,故不满足这个条件的一定不是吸血鬼数字,所以通过条件(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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkinjava 笔记 算法