JAVA基础笔记01
来源:互联网 发布:淘宝上买东西不花钱 编辑:程序博客网 时间:2024/06/15 07:25
package work8;
import java.util.Arrays;
/**
* 吸血鬼数字,高效率版本(来自网络,已理解)
* 一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。以两个0结尾的数字不是吸血鬼数字
* 比如 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;
// 双重循环穷举
for (int i = 10; i < 100; i++) {
// j=i+1避免重复
from = Math.max(1000 / i, i + 1); //没有哪个两位数满足ab*ab=abab,所以这里j从i+1开始就可以了
to = Math.min(10000 / i, 100);
for (int j = from; j < to; j++) {
i_val = i * j;
/**
*假设val = 1000a + 100b + 10c + d, 因为满足val = x * y, 则有x = 10a + b, y = 10c + d
*则val - x - y = 990a + 99b + 9c = 9 * (110a + 11b + c), 所以val - x - y能被9整除。
*所以满足该条件的数字必定能被9整除,所以可以直接过滤其他数字。别的组合结果相同。
*/
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);
}
import java.util.Arrays;
/**
* 吸血鬼数字,高效率版本(来自网络,已理解)
* 一个4位数字,可以拆分2个2位数数字的乘积,顺序不限。以两个0结尾的数字不是吸血鬼数字
* 比如 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;
// 双重循环穷举
for (int i = 10; i < 100; i++) {
// j=i+1避免重复
from = Math.max(1000 / i, i + 1); //没有哪个两位数满足ab*ab=abab,所以这里j从i+1开始就可以了
to = Math.min(10000 / i, 100);
for (int j = from; j < to; j++) {
i_val = i * j;
/**
*假设val = 1000a + 100b + 10c + d, 因为满足val = x * y, 则有x = 10a + b, y = 10c + d
*则val - x - y = 990a + 99b + 9c = 9 * (110a + 11b + c), 所以val - x - y能被9整除。
*所以满足该条件的数字必定能被9整除,所以可以直接过滤其他数字。别的组合结果相同。
*/
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);
}
}
结果:
第1组: 15*93=1395
第2组: 21*60=1260
第3组: 21*87=1827
第4组: 27*81=2187
第5组: 30*51=1530
第6组: 35*41=1435
第7组: 80*86=6880
共找到7组吸血鬼数
232
阅读全文
0 0
- Java基础笔记01
- JAVA基础笔记01
- java基础学习笔记01
- java基础学习笔记01
- JAVA基础学习笔记01
- Java笔记01-Java开发基础
- Java笔记02-Java语法基础01
- JAVA学习笔记01 -- 面向对象基础
- java笔记01(基础、面向对象、异常)
- Java基础笔记
- java基础学习笔记
- java基础笔记(一)
- java基础学习笔记
- java基础笔记
- Java基础笔记
- java基础笔记1
- java基础笔记2
- java基础笔记3
- 矩阵取数问题
- ubuntu14.04如何安装英伟达显卡驱动
- 闹钟AlarmManager和通知NotificationManager
- LeetCode 23: Merge k Sorted Lists
- 图的深度优先遍历(递归、非递归;邻接表,邻接矩阵)
- JAVA基础笔记01
- 旋转数组的最小数字
- 魔术方法
- sql 查出一张表中重复的所有记录数据
- Swift3.1 最新开启用户授权方法
- Php性能分析-xhprof
- python 生成器generator
- ubuntu14.04安装vnc服务器并创建多人用户
- struct与union的对齐方式解析