码迷,mamicode.com
首页 > 其他好文 > 详细

第四章习题:斐波那.契数列&&吸血鬼数字

时间:2014-08-21 01:35:13      阅读:232      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!