笨鸟学飞

经典算法回顾1

本文根据园主一线码农的进程来学习,今后也会自己补充一些,希望能够有所进步
public
class Main { public static void main(String[] args) { // TODO Auto-generated method stub /* * 公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱 * 用100文钱买100只鸡,其中公鸡,母鸡,小鸡必须有,请问各多少只 */ for(int i = 1; i < 20;i++){ for(int j =1; j < 33; j++){ int k = 100 - i - j; if((0 == k % 3)&&(100 == i*5+j*3+k/3)){ System.out.println(i+" "+j+" "+k); } } } } }

public class Main2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         * 五家共井
         * 五家人公用一口井,甲家的绳子用两条不够,要再用乙家的一条绳子
         * 乙家的用三条绳子不够,要再用丙家的一条
         * 丙家的用四条绳子不够,还要再用丁家的一条
         * 丁家的用五条不够,还要再用戊家的一条
         * 戊家用六条不够,还要用甲家的一条
         * 最后问井有多深,每家的绳子有多长
         */
        for(int i = 1; i < 5; i++){
            int h = 721 * i;
            int a = 265 * i;
            int b = 191 * i;
            int c = 148 * i;
            int d = 129 * i;
            int e = 76 * i;
            System.out.println(a +" "+ b +" "+c+" "+d+" "+e+" "+h);
        }
    }
}
五家共井问题提示:遇到问题多思考,不要立即动手,多思考一下,也许会有更好的办法。
public class Main3 {
    static int Sum(int i, int j){
        if (10 == i){
            return j;
        }
        return Sum(i+1,2*(j+1));
        
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         *猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾就多吃了一个。第二天早上又将剩下的桃子吃了一半,还是不过瘾又多
        吃了一个。以后每天都吃前一天剩下的一半再加一个。到第10天刚好剩一个。问猴子第一天摘了多少个桃子?
        尾递归
         */
        int sum = Sum(1,1);
        System.out.println(sum);
    }


}
public class Main4 {
    static String str1 = "acgbfh";
    static String str2 = "ahka";
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        /*
         * 最长公共子序列
         */
        int a = LCS(str1,str2);
        System.out.print(a);
        
    }
    static int LCS(String str1,String str2){
        int a[][] = new int [str1.length()+1][str2.length()+1];
        for(int i = 0; i <=str1.length(); i++){
            a[i][0] = 0;
        }
        for(int j = 0; j <=str2.length(); j++){
            a[0][j] = 0;
        }
        for(int i = 1; i <= str1.length(); i++){
            for(int j = 1; j <= str2.length(); j++){
                if(str1.getBytes()[i-1] == str2.getBytes()[j-1]){
                    a[i][j] = a[i-1][j-1] +1;
                }
                else{
                    a[i][j] = Math.max(a[i-1][j], a[i][j-1]);
                }
            }
        }
        return a[str1.length()][str2.length()];
    }

}

 //最长公共子序列为一经典算法。

 

 

posted on 2015-01-24 21:05  笨鸟学飞  阅读(198)  评论(0编辑  收藏  举报

导航