标签:style blog color java os for ar art
package com.twoslow.cha4; /** * 斐波那契数列:从3个数字起,每一个数都是前2个数之和:1 1 2 3 5 8 13... * @author sai * */ public class Fibonacci { public static void main(String[] args) { for(int i = 0 ; i < 10 ;i++) { System.out.print(fib(i) + "、"); } } public static int fib(int n) { if(n < 2) return 1 ; return fib(n-1) + fib(n-2) ; } }
package com.twoslow.cha4; /** * 吸血鬼数字:位数为偶数的数字,可以由一对数字相乘得到 * 这对数字包含乘积一半位数的数字,从最初的数字中选取的数字 * 可以任意排序。以两个0结尾的数字是不允许的。 * eg:1260 = 21 *60 ; 1827 = 21*87 ; 2187 = 27 *81 * 找出4位数的所有吸血鬼数字。 * @author sai * */ public class VampireNumbers2 { static int a(int i) {//千位 return i/1000; } static int b(int i) {//百位 return (i%1000)/100; } static int c(int i) {//十位 return ((i%1000)%100)/10; } static int d(int i) {//个位 return ((i%1000)%100)%10; } static int com(int i, int j) { return (i * 10) + j; } static void productTest (int i, int m, int n) { if(m * n == i) System.out.println(i + " = " + m + " * " + n); } public static void main(String[] args) { long start = System.currentTimeMillis() ; for(int i = 1001; i < 9999; i++) {//从4个数中任意取2个数的排列组合等于4×3=12 productTest(i, com(a(i), b(i)), com(c(i), d(i))); productTest(i, com(a(i), b(i)), com(d(i), c(i))); productTest(i, com(a(i), c(i)), com(b(i), d(i))); productTest(i, com(a(i), c(i)), com(d(i), b(i))); productTest(i, com(a(i), d(i)), com(b(i), c(i))); productTest(i, com(a(i), d(i)), com(c(i), b(i))); productTest(i, com(b(i), a(i)), com(c(i), d(i))); productTest(i, com(b(i), a(i)), com(d(i), c(i))); productTest(i, com(b(i), c(i)), com(d(i), a(i))); productTest(i, com(b(i), d(i)), com(c(i), a(i))); productTest(i, com(c(i), a(i)), com(d(i), b(i))); productTest(i, com(c(i), b(i)), com(d(i), a(i))); } long end = System.currentTimeMillis() ; System.out.println(end-start); //简单测试:时间在21-24之间 ,22居多 } }
package com.twoslow.cha4; import java.util.Arrays; /** * 吸血鬼数字:位数为偶数的数字,可以由一对数字相乘得到 * 这对数字包含乘积一半位数的数字,从最初的数字中选取的数字 * 可以任意排序。以两个0结尾的数字是不允许的。 * eg:1260 = 21 *60 ; 1827 = 21*87 ; 2187 = 27 *81 * 找出4位数的所有吸血鬼数字。 * result:1260 = 21 * 60 1395 = 15 * 93 1435 = 41 * 35 1530 = 51 * 30 1827 = 87 * 21 2187 = 27 * 81 6880 = 86 * 80 6880 = 80 * 86 * @author sai * */ public class VampireNumbers3 { public static void main(String[] args) { long start = System.currentTimeMillis() ; int i_val ; char[] c1 ,c2 ; for(int x = 10 ; x<100 ; x++) { for(int y = x+1 ;y <100 ;y++) { i_val = x * y ; if(i_val % 100 == 0 && (i_val-x-y) % 9 !=0) { continue ; } c1 = String.valueOf(i_val).toCharArray() ; c2 = (String.valueOf(x) + String.valueOf(y)).toCharArray() ; Arrays.sort(c1); Arrays.sort(c2); if(Arrays.equals(c1, c2)){ System.out.println(i_val +" = "+x+" * "+y); } } } long end = System.currentTimeMillis() ; System.out.println(end-start); //简单测试:31 32居多 } }
package com.twoslow.cha4; import java.util.Arrays; /** * 吸血鬼数字:位数为偶数的数字,可以由一对数字相乘得到 * 这对数字包含乘积一半位数的数字,从最初的数字中选取的数字 * 可以任意排序。以两个0结尾的数字是不允许的。 * eg:1260 = 21 *60 ; 1827 = 21*87 ; 2187 = 27 *81 * 找出4位数的所有吸血鬼数字。 * result:1260 = 21 * 60 1395 = 15 * 93 1435 = 41 * 35 1530 = 51 * 30 1827 = 87 * 21 2187 = 27 * 81 6880 = 86 * 80 6880 = 80 * 86 * @author sai * */ public class VampireNumbers { public static void main(String[] args) { long start = System.currentTimeMillis() ; 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&to。如果重复则为14组 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 % 100 ==0:排除尾数为2个0的情况 * i_val-i-j%9 !=0 :任意的4位数可以看成:i_val = 1000a+100b+10c+d * 任意的两位数可以由这4个数其中的任意两位组成。例如10a+b,10b+a,10c+a...,看出系数为10或者1 * i_val - i - j = 1000a+100b+10c+d-m1*a-m2*b-m3*c-m4*d * =(1000-m1)*a+(100-m2)*b+(10-m3)*c+(1-m4)*d * 无论m1,m2,m3,m4为1或者10,a,b,c,d四个数的系数均为9的倍数。 * * */ if (i_val % 100 == 0 || (i_val - i - j) % 9 != 0) { continue; } count++; ar_str1 = String.valueOf(i_val).split(""); //如果i_val="1260" ,ar_str1={"","1","2","6","0"} ar_str2 = (String.valueOf(i) + String.valueOf(j)).split(""); Arrays.sort(ar_str1); Arrays.sort(ar_str2); /* * 排序比较为了判断4个数字是否都相同 */ if (Arrays.equals(ar_str1, ar_str2)) {// 排序后比较,为真则找到一组 sum++; System.out.println("第" + sum + "组: " + i + "*" + j + "=" + i_val); } } } long end = System.currentTimeMillis() ; System.out.println(end-start); System.out.println("共找到" + sum + "组吸血鬼数"); System.out.println(count); //简单测试:时间在17-20,18和19居多 } }
第四章习题:斐波那.契数列&&吸血鬼数字,布布扣,bubuko.com
标签:style blog color java os for ar art
原文地址:http://www.cnblogs.com/twoslow/p/3926000.html