50道經典的JAVA編程題 (6-10)


50道經典的JAVA編程題 (6-10),今晚做了10道了,累死了。。。感覺難度不是很大,就是不知道是不是最好的實現方法啊!希望大神們能給指點哈。。。


【程序6】GCDAndLCM.java
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
1.程序分析:利用輾除法。
2.輾轉相除法基於如下原理:兩個整數的最大公約數等於其中較小的數和兩數的相除余數的最大公約數。
3.最小公倍數等於兩數之積除以最大公約數

package test50;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * @author VellBibi
 *【程序6】GCDAndLCM.java后者是輾轉相除法 
 *題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 
 *1.程序分析:利用輾除法。 
 *2.輾轉相除法基於如下原理:兩個整數的最大公約數等於其中較小的數和兩數的相除余數的最大公約數。 
 *3.最小公倍數等於兩數之積除以最大公約數
 */
public class GCDAndLCM {
    
    /**
     * 最大公約數普通求法
     * @param m
     * @param n
     * @return 最大公約數
     */
    public static int getGCDNormal(int m, int n){//最大公約數普通求法
        int i = (m > n ? n : m);
        
        for(; i>1; i--){
            if(m%i == 0 && n%i == 0)
                return i;
        }
        return 1;
    }
    
    /**
     * 最大公約數輾轉相除法
     * @param m
     * @param n
     * @return 最大公約數
     */
    public static int getGCD(int m, int n){//最大公約數輾轉相除法
        if(m%n == 0) return n;
        else return getGCD(n, m%n);//遞歸輾轉相除
    }
    
    /**
     * 最小公倍數
     * @param m
     * @param n
     * @return 最小公倍數
     */
    public static int getLCM(int m, int n){
        return (m * n)/getGCD(m, n);//最小公倍數等於兩數之積除以最大公約數
    }
    
    public static void main(String[] args) {
        BufferedReader buffer = new BufferedReader(new InputStreamReader(
                System.in));
        int m = 0, n = 0;
        try {
            m = Integer.parseInt(buffer.readLine());
            n = Integer.parseInt(buffer.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        System.out.println("最小公倍數:" + getLCM(m, n));
        System.out.println("最大公約數:" + getGCD(m, n));
    }
}

 

image


【程序7】 StChar.java
題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
1.程序分析:利用循環,使用Map存儲數據.其實完全可以使用4個變量來解決,這邊舍近求遠復習下Map啦

package test50;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
 * @author VellBibi
 *【程序7】 StChar.java 
 *題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。 
 *1.程序分析:利用循環,使用Map存儲數據.其實完全可以使用4個變量來解決,這邊舍近求遠復習下Map啦
 */
public class StChar {
    public static Map<Integer, Integer> countChar(String str){
        Map<Integer, Integer> m = new HashMap<Integer, Integer>();
        m.put(1, 0);
        m.put(2, 0);
        m.put(3, 0);
        m.put(4, 0);
        char[] ch = str.toCharArray();
        for(int i=0; i<ch.length; i++){
            if(ch[i] >= 'a' && ch[i] <= 'z' || ch[i] >= 'A' && ch[i] <= 'Z')
                m.put(1, m.get(1) + 1);
            else if(ch[i] == ' ')
                m.put(2, m.get(2) + 1);
            else if(ch[i] >= '0' && ch[i] <= '9')
                m.put(3, m.get(3) + 1);
            else
                m.put(4, m.get(4) + 1);
        }
        return m;
    }
    
    public static void main(String[] args) {
        BufferedReader buffer = new BufferedReader(new InputStreamReader(
                System.in));
        String str = null;
        try {
            str = buffer.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        Map<Integer, Integer> m = countChar(str);
        Set<Integer> keys = m.keySet();
        Iterator<Integer> it = keys.iterator();
        int n, k;
        while(it.hasNext()){
            k = it.next();
            n = m.get(k);
            switch (k) {
            case 1:
                System.out.println("英文字母: "+n);
                break;
            case 2:
                System.out.println("空格: "+n);
                break;
            case 3:
                System.out.println("數字: "+n);
                break;
            case 4:
                System.out.println("其它字符: "+n);
                break;
            default:
                break;
            }
        }
    }
}

 

image


【程序8】 TestAdd.java
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
1.程序分析:關鍵是計算出每一項的值。

package test50;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
 * @author VellBibi
 *【程序8】 TestAdd.java 
 *題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。 
 *1.程序分析:關鍵是計算出每一項的值。
 */
public class TestAdd {
    
    public static long sumAdd(int a, int n){
        long cup = 0;
        long ans = 0;
        for(int i=0; i<n; i++){
            cup = 0;
            for(int j=0; j<=i; j++){
                cup = cup + a * (long)Math.pow(10, j);
            }
            ans = ans + cup;
        }
        return ans;
    }
    public static void main(String[] args) {
        BufferedReader buffer = new BufferedReader(new InputStreamReader(
                System.in));
        int n = 0;
        try {
            n = Integer.parseInt(buffer.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        System.out.println(sumAdd(2, n));
    }
}

 

image


【程序9】 WanShu.java
題目:一個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3.編程 找出1000以內的所有完數。

package test50;
/**
 * @author VellBibi
 *【程序9】 WanShu.java 
 *題目:一個數如果恰好等於它的因子之和,這個數就稱為"完數"。例如6=1+2+3.編程 找出1000以內的所有完數。
 */
public class WanShu {
    public static boolean isWanShu(int a){
        int cup = 0;
        for(int i=1; i<a; i++){
            if(a%i == 0)
                cup = cup + i;
        }
        return (cup == a);
    }
    
    public static void main(String[] args) {
        for(int i=1; i<1000; i++){
            if(isWanShu(i)){
                System.out.print(i + ",");
            }
        }
    }
}

 

image


【程序10】TestBall.java
題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?

package test50;
/**
 * @author VellBibi
 *【程序10】TestBall.java 
 *題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?
 *1.程序分析:遞歸實現
 */
public class TestBall {
    public static double sumBallHeight(double h, int n){
        if(n == 1) return h/2;
        else return sumBallHeight(h/2, n-1);
    }
    
    public static void main(String[] args) {
        System.out.println(sumBallHeight(100, 10));
    }
}

 

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM