project euler 43
来源:互联网 发布:最优化方法 编辑:程序博客网 时间:2024/06/05 07:50
Problem 43
Sub-string divisibility
The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property.
Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following:
- d2d3d4=406 is divisible by 2
- d3d4d5=063 is divisible by 3
- d4d5d6=635 is divisible by 5
- d5d6d7=357 is divisible by 7
- d6d7d8=572 is divisible by 11
- d7d8d9=728 is divisible by 13
- d8d9d10=289 is divisible by 17
Find the sum of all 0 to 9 pandigital numbers with this property.
子串的可整除性
1406357289是一个0至9全数字数,因为它由0到9这十个数字排列而成;但除此之外,它还有一个有趣的性质:子串的可整除性。
记d1是它的第一个数字,d2是第二个数字,依此类推,我们注意到:
- d2d3d4=406能被2整除
- d3d4d5=063能被3整除
- d4d5d6=635能被5整除
- d5d6d7=357能被7整除
- d6d7d8=572能被11整除
- d7d8d9=728能被13整除
- d8d9d10=289能被17整除
找出所有满足同样性质的0至9全数字数,并求它们的和。
@Testpublic void test() {Combination comb = new Combination(10, 0);List<int[]> combinations = comb.generateCom();long sum = 0;for (int i = 0; i < combinations.size(); i++) {int[] arr = combinations.get(i);if (checkNum(arr, comb)) {long val = comb.getIntVal(arr);sum += val;System.out.println(val);}}System.out.println("sum=" + sum);}public boolean checkNum(int[] arr, Combination comb) {return (comb.getIntVal(Arrays.copyOfRange(arr, 1, 4)) % 2 == 0)&& (comb.getIntVal(Arrays.copyOfRange(arr, 2, 5)) % 3 == 0)&& (comb.getIntVal(Arrays.copyOfRange(arr, 3, 6)) % 5 == 0)&& (comb.getIntVal(Arrays.copyOfRange(arr, 4, 7)) % 7 == 0)&& (comb.getIntVal(Arrays.copyOfRange(arr, 5, 8)) % 11 == 0)&& (comb.getIntVal(Arrays.copyOfRange(arr, 6, 9)) % 13 == 0)&& (comb.getIntVal(Arrays.copyOfRange(arr, 7, 10)) % 17 == 0);}public static class Combination {private int[] startArr;public Combination(int size) {this(size, 1);}public Combination(int size, int startNum) {startArr = new int[size];for (int i = 0; i < size; i++) {startArr[i] = i + startNum;}}public List<int[]> generateCom() {List<int[]> ret = new ArrayList<int[]>();ret.add(Arrays.copyOf(startArr, startArr.length));while (true) {int lastAsc = findLastAsc(startArr);if (lastAsc == -1) {break;}int lasBigThanAsc = findBigThanAsc(startArr, lastAsc);exchangeEach(lastAsc, lasBigThanAsc, startArr);ret.add(Arrays.copyOf(startArr, startArr.length));}return ret;}private int findBigThanAsc(int[] startArr2, int lastAsc) {int i = 0;for (i = startArr2.length - 1; i > lastAsc; i--) {if (startArr2[i] > startArr2[lastAsc]) {return i;}}assert (i > lastAsc);return i;}private void exchangeEach(int lastAsc, int lasBigThanAsc,int[] startArr2) {int temp = startArr2[lastAsc];startArr2[lastAsc] = startArr2[lasBigThanAsc];startArr2[lasBigThanAsc] = temp;int[] sortArr = getCopyArr(lastAsc + 1, startArr2);for (int i = 0; i < sortArr.length / 2; i++) {temp = sortArr[sortArr.length - 1 - i];sortArr[sortArr.length - 1 - i] = sortArr[i];sortArr[i] = temp;}for (int i = lastAsc + 1; i < startArr2.length; i++) {startArr2[i] = sortArr[i - lastAsc - 1];}}private int[] getCopyArr(int start, int[] startArr2) {int[] ret = new int[startArr2.length - start];for (int i = start; i < startArr2.length; i++) {ret[i - start] = startArr2[i];}return ret;}private int findLastAsc(int[] startArr2) {for (int i = startArr2.length - 1; i > 0; i--) {if (startArr2[i] > startArr2[i - 1]) {return i - 1;}}return -1;}public long getIntVal(int[] arr) {long sum = arr[0];for (int i = 1; i < arr.length; i++) {sum = sum * 10 + arr[i];}return sum;}}
0 0
- Project Euler problem 43
- Project Euler 43
- Python-Project Euler 43
- project euler 43
- Project Euler
- project euler
- Project Euler
- Project Euler:Problem 43 Sub-string divisibility
- Project Euler .net
- Project Euler 0
- Project Euler 1-6
- Project Euler 7-10
- Euler Project Problem 6
- project euler problem 11
- project euler problem14
- Project Euler Problem 81
- Project Euler Problem 60
- Project Euler Problem 59
- hdu1029 B - Ignatius and the Princess IV
- 红黑树
- C++学习笔记2015.10.5
- Java笔记(数组)
- 如何获取web项目hibernate.cfg.xml配置文件中的数据
- project euler 43
- JNI
- Java笔记(字符串操作方法阅兵)
- 软件可靠性方法 学习笔记
- C#中使用split分割字符串的几种方法小结
- CSS3之position
- Pascal's Triangle
- Linux终端的颜色码
- SYSPROCESSES 查看连接