1. 程式人生 > >課堂作業02-2

課堂作業02-2

stream amr 課程 urn return align mov clear war

一、 課程作業01_1

1. 實驗題目


使用組合數公式利用n!來計算⒈

2. 設計思想

設計一個可以求n!的方法,提示用戶輸入n和k兩個變量,若輸入的數符合要求,調用求階乘的方法,套用公式,求出結果。

3. 程序流程圖

技術分享

4. 源程序代碼

import java.util.Scanner;

public class Homework02_1 {

public static void main(String[] args)

{

Homework02_1 h=new Homework02_1();

h.go();

}

public void go()

{

System.out.println("請輸入n和k:");

@SuppressWarnings("resource")

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt(),k=scanner.nextInt();

if(n>=k&&k>=0&&n>0)//判斷n和k是否符合要求

System.out.println("C("+n+","+k+")="+f(n)/f(k)/f(n-k));

else System.out.println("輸入的數不符合要求");

}

public int f(int n)//遞歸求階乘

{

if(n==0||n==1)

return 1;

else

return n*f(n-1);

}

}

5. 結果截圖

技術分享技術分享

二、 課程作業01_2

1. 實驗題目

使用遞推的方法用楊輝三角形計算

技術分享

2. 設計思想

根據用戶輸入的數創建一個數組,三角形,用數組把三角形,用遞推法算出楊輝三角形中的每一個數,存在數組中,然後C(n,k)就等於數組中第n-1行k-1列的數。

3. 程序流程圖

技術分享

4. 源程序代碼

import java.util.Scanner;

public class Homework02_1_2 {

public static void main(String[] args)

{

Homework02_1_2 h=new Homework02_1_2();

h.go();

}

public void go()

{

System.out.println("請輸入n和k:");

@SuppressWarnings("resource")

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt(),k=scanner.nextInt();

if(n>=k&&k>=0&&n>0)//判斷n和k是否符合要求

System.out.println("C("+n+","+k+")="+createArrayAndReturn(n,k));

else System.out.println("輸入的數不符合要求");

}

public int createArrayAndReturn(int n,int k)

{

int [][]array=new int[n+1][];

for(int i=0;i<=n;i++)

{

array[i]=new int[i+1];//創建一個第i行有i個元素的數組

}

for(int i=0;i<n+1;i++)

{

array[i][0]=1;//每行第一個和最後一個元素都為1

array[i][i]=1;

for(int j=1;j<i;j++)//其他的元素都為其上一行對應肩上兩個元素的和

{

array[i][j]=array[i-1][j-1]+array[i-1][j];

}

}

return array[n][k];

}

}

5. 結果截圖

技術分享技術分享

三、 課程作業01_3

1. 實驗題目


使用遞歸的方法用組合數遞推公式計算

2. 設計思想

聲明一個可以求C(n,k)值的函數,每次遞推套用楊輝三角形公式,直到n=k或者k=1。

3. 程序流程圖

技術分享

4. 源程序代碼

import java.util.Scanner;

public class Homework02_1_2 {

public static void main(String[] args)

{

Homework02_1_2 h=new Homework02_1_2();

h.go();

}

public void go()

{

System.out.println("請輸入n和k:");

@SuppressWarnings("resource")

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt(),k=scanner.nextInt();

if(n>=k&&k>=0&&n>0)//判斷n和k是否符合要求

System.out.println("C("+n+","+k+")="+C(n,k));

else System.out.println("輸入的數不符合要求");

}

public int C(int n,int k)//遞推法運用楊輝三角形公式

{

if(k==1)

return n;

else if(n==k)

return 1;

else return C(n-1,k-1)+C(n-1,k);//楊輝三角形公式

}

}

5. 結果截圖

技術分享技術分享

四、 課程作業02

1. 實驗題目

遞歸編程解決漢諾塔問題。用Java實現

2. 設計思想

使用遞歸方法,定義一個move(char,char)方法和一個hanoi ( int,char,char,char)方法。

第一步將A上n-1個盤子借助C移到B上

第二步將A上一個盤子移到C上

第三步將B上n-1個盤子借助A移到C上

3. 程序流程圖

技術分享

4. 源程序代碼

import java.util.Scanner;

public class Homework02_2 {

public static void main(String[] args)

{

Homework02_2 h=new Homework02_2();

h.go();

}

public void go()

{

System.out.println("請輸入盤子的個數n:");

@SuppressWarnings("resource")

Scanner scanner=new Scanner(System.in);

int n=scanner.nextInt();

if(n>=0)//判斷n是否符合要求

{

System.out.println("移動"+n+"個盤子的步驟為:");

hanoi(n,‘A‘,‘B‘,‘C‘);

}

else System.out.println("輸入的數不符合要求");

}

public void hanoi(int m,char one,char two,char three)

{

if(m==1)

move(one,three);

else

{

hanoi(m-1,one,three,two);//第一步將A上n-1個盤子借助C移到B上

move(one,three);//第二步將A上一個盤子移到C上

hanoi(m-1,two,one,three);//第三步將B上n-1個盤子借助A移到C上

}

}

public void move(char x,char y)

{

System.out.println(x+"->"+y);

}

}

5. 結果截圖

技術分享技術分享

五、 課程作業03

1. 實驗題目

使用遞歸方式判斷某個字串是否是回文( palindrome )

2. 設計思想

取得用戶輸入的字符串,調用String的length()函數獲得字符個數,聲明一個數組,使用for循環和charAT函數將數組初始化。

之後使用一個返回類型為boolean的遞歸函數,以循環次數和判斷對應位置數字是否相等決定是否結束遞歸函數。

3. 程序流程圖

技術分享

4. 源程序代碼

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class Homework02_3 {

public static void main(String[] args)

{

Homework02_3 h=new Homework02_3();

try {//處理有異常的方法

h.go();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void go() throws IOException//聲明這個方法是有風險的

{

String input=null;

System.out.println("輸入字符串:");

BufferedReader is=new BufferedReader(new InputStreamReader(System.in));

input=is.readLine();

if(!input.isEmpty())//判斷n是否符合要求

{

int [] array=new int[input.length()];

for(int i=0;i<input.length();i++)//將字符串中的每一個字符取出,賦給數組

{

array[i]=input.charAt(i);

}

System.out.println("是回文數?"+ifHuiWen(array,0));

}

else System.out.println("輸入的數不符合要求");

}

public boolean ifHuiWen(int[] a,int l)//遞歸法判斷是否是回文數

{

if(l==a.length/2)//執行到一定次數的時候還沒有返回false,說明就是回文數了

return true;

if(a[l]==a[a.length-l-1])

return ifHuiWen(a,l+1);

else return false;

}

}

5. 結果截圖

技術分享技術分享

課堂作業02-2