天天看點

實驗1 算法基礎實驗

實驗1 算法基礎實驗

OJ練習

1. 計算球體積:http://acm.hdu.edu.cn/showproblem.php?pid=2002

2. 成績轉換:http://acm.hdu.edu.cn/showproblem.php?pid=2004

3. 求奇數的乘積:http://acm.hdu.edu.cn/showproblem.php?pid=2006

4. 平方和與立方和:http://acm.hdu.edu.cn/showproblem.php?pid=2007

5. 水仙花數:http://acm.hdu.edu.cn/showproblem.php?pid=2010

6. 母牛的故事:http://acm.hdu.edu.cn/showproblem.php?pid=2018

7*. LELE的RPG難題:http://acm.hdu.edu.cn/showproblem.php?pid=2045

8*. 考新郎:http://acm.hdu.edu.cn/showproblem.php?pid=2049

9*. 詭異的樓梯:http://acm.hdu.edu.cn/showproblem.php?pid=1180

10*. 變形課:http://acm.hdu.edu.cn/showproblem.php?pid=1181

實驗内容
1. 百元百雞問題。每隻母雞3元,每隻公雞4元,每隻小雞0.5元,如果花100元錢買100隻雞,請問有哪些可能?試程式設計輸出所有的組合。【注:每種雞的數量都可以為零】
源代碼:

import java.util.Scanner;
public class Main{
public static void main(String args[]){
        Scanner cin = new Scanner(System.in);
        int a,b,c;
        for(int i=0; i<=100; i++) {
            for(int j=0; i+j<=100; j++) {
                int k = 100 - i - j;
                if(3*i + 4*j + 0.5*k == 100) {
                    System.out.printf("%d %d %d\n",i,j,k);
                }
            }
        }
    }
}
6 10 84
13 5 82
20 0 80


2. 使用遞歸編寫一個程式,求以下數列的前n項之和:

源代碼:
import java.util.Scanner;
public class Main{
static double f(int n) {
    if(n==1) {
        return 1.0;
    }else{
        if(n%2==0) {
            return -1.0/n+f(n-1);
        }
        else {
            return 1.0/n+f(n-1);
        }
    }
}
public static void main(String args[]){
    Scanner cin = new Scanner(System.in);
        while(cin.hasNext()) {
            int n = cin.nextInt();
            System.out.println(f(n));
        }
    }
}


當n=10時,結果為  0.6456349206349207          。
當n=15時,結果為  0.7253718503718505       。

3. 有一隻經過訓練的蜜蜂隻能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。
其中,蜂房的結構如下所示。

    輸入整數a和b表示起點和終點,輸出a到b可能的線路數。例如:輸入1和2,輸出1;輸入3和6,輸出3。
提示:尋找規律,使用遞歸實作。
源代碼:

import java.util.Scanner;
public class Main{
public static void main(String args[]){
    Scanner cin = new Scanner(System.in);
        long[] a = new long[100];
        a[0]=0;
        a[1]=1;
        a[2]=2;
        for(int i=3; i<=50; i++) {
            a[i] = a[i-1] + a[i-2];
        }
        int n = cin.nextInt();
        while(n-- != 0 ) {
            int s = cin.nextInt();
            int e = cin.nextInt();
            System.out.println(a[e-s]);
        }
    }
}

           
說明:
           

(1) 程式設計語言不限,建議使用Java、C++或者C語言。

(2) 需要将程式源代碼複制并粘貼到每道題之後的方框中(部分題需要填寫輸出結果)。

(3) 在送出實驗報告時,先關閉所有檔案,再将檔案名改為“學号-姓名-算法分析與設計實驗1.doc”;将實驗報告在指定時間之前由學習委員收集整理後統一發送至郵箱[email protected]。