1. 程式人生 > >方法---課程作業02

方法---課程作業02

課程作業 log sta else if png 利用 pan nextline amp

課後作業1

(1)使用組合數公式

1、程序設計思想

利用遞歸求n的階乘,遞歸終止條件為:if(n==1||n==0) f=1;不終止則執行:f=n*fac(n-1);調用該方法分別求出n!、k!、(n-k)!,再利用組合數公式即可求出組合數。

2、流程圖

技術分享

技術分享

3、源程序代碼

import java.util.*;

public class Combination {

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println("n個不同元素中取出

k個元素,請分別輸入nk的值:");

int n,k,t;

Scanner input=new Scanner(System.in);

n=input.nextInt();

k=input.nextInt();

input.close();

t=c(n,k);

System.out.println(""+n+"個不同元素中取出"+k+"個元素,組合數為:"+t);

}

public static int c(int n,int k) //n個不同元素中取出

k個元素

{

int n1,k1,nk1,result;

n1=fac(n);

k1=fac(k);

nk1=fac(n-k);

result=n1/(k1*nk1);

return result;

}

public static int fac(int n) //n的階乘

{

int f;

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

f=1;

else f=n*fac(n-1);

return f;

}

}

4、截圖

技術分享

(2)使用遞推的方法用楊輝三角計算

1、程序設計思想

先動態開辟一個足夠大的二維數組,按楊輝三角中數的規律給該數組賦值,因為楊輝三角第n行第k列的元素為從n-1個不同元素中取k-1個元素的組合數,所以可根據該數組算出想求的組合數。

2、流程圖

技術分享

技術分享

3、源程序代碼

import java.util.*;

public class Combination {

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println("n個不同元素中取出k個元素,請分別輸入nk的值:");

int n,k,t;

Scanner input=new Scanner(System.in);

n=input.nextInt();

k=input.nextInt();

input.close();

t=yangHui(n,k);

System.out.println(""+n+"個不同元素中取出"+k+"個元素,組合數為:"+t);

}

public static int yangHui(int n,int k) //求楊輝三角中第n行第k列的元素

{

int i,j;

int arr[][]=new int [100][];

for(i=0;i<arr.length;i++)

{arr[i]=new int [i+1];

arr[i][0]=1;

arr[i][i]=1;}

for(i=2;i<arr.length;i++)

{

for(j=1;j<arr[i].length-1;j++)

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

}

return arr[n][k];

}

}

4、截圖

技術分享

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

1、程序設計思想

組合數的遞推公式為c(n,k)=c(n-1,k-1)+c(n-1,k),創建一個使用遞歸方法的函數,遞歸終止條件為:if(n==0) return 1;else if(n==1) return i;else if(n==k) return 1;調用該函數即可求出組合數。

2、流程圖

技術分享

3、源程序代碼

import java.util.Scanner;

public class Combination {

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println("n個不同元素中取出k個元素,請分別輸入nk的值:");

int n,k,t;

Scanner input=new Scanner(System.in);

n=input.nextInt();

k=input.nextInt();

input.close();

t=c(n,k);

System.out.println(""+n+"個不同元素中取出"+k+"個元素,組合數為:"+t);

}

public static int c(int n,int k) //n個不同元素中取出k個元素

{

if(k==0) return 1;

else if(n==1) return 1;

else if(n==k) return 1;

else return c(n-1,k-1)+c(n-1,k);

}

}

4、截圖

技術分享

課後作業2

遞歸編程解決漢諾塔問題。

1、程序設計思想

假設要從A移動n個盤子到B,運用遞歸的方法,只需先將n-1個盤子借助C從A移到B,再將剩下的一個盤子從A直接移到C,最後再將B上的n-1個盤子借助A從B移到C即可。遞歸終止條件為:if(number==1) move(one,three)。

2、流程圖

技術分享

3、源程序代碼

import java.util.*;

public class HanLuo {

public static void main(String args[])

{

System.out.print("請輸入盤子的數量:");

Scanner input=new Scanner(System.in);

int number=input.nextInt();

input.close();

hanluo(number,‘A‘,‘B‘,‘C‘);

}

public static void hanluo(int number,char one,char two,char three) //number個盤子借助"two""one"移到"three"

{

if(number==1) move(one,three);

else {

hanluo(number-1,one,three,two);

move(one,three);

hanluo(number-1,two,one,three);

}

}

public static void move(char a,char b)

{

System.out.println(a+"->"+b);

}

}

4、截圖

技術分享

課後作業3

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

1、程序設計思想

輸入一個字符串str,int n=str.length(),再利用str.length-n與str.length()-str.length()+n-1分別求出該字符串的第一個以及最後一個字符,將其進行比較,遞歸終止條件為:if(s1==s2&&L1>(length()/2-1)&&L1<L2) j=1; else if(s1!=s2&&L1>(length()/2-1)&&L1<L2) j=0;

2、流程圖

技術分享技術分享

3、源程序代碼

import java.util.Scanner;

public class Palindrome {

public static void main(String[] args) {

// TODO Auto-generated method stub

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

String str;

int n;

Scanner input=new Scanner(System.in);

str=input.nextLine();

input.close();

n=str.length();

int j=judge(str,n);

if(j==1) System.out.println(str+"是回文字符串");

else System.out.println(str+"不是回文字符串");

}

public static int judge(String str,int n)

{

int j=0;

if(str==""||str==null)

j=0;

int l1,l2;

char s1,s2; //用字符串的第一個字符與最後一個字符比較,第二個與倒數第二個比較,依此類推

l1=str.length()-n;

l2=str.length()-l1-1;

s1=str.charAt(l1);

s2=str.charAt(l2);

if(s1==s2&&l1>=(str.length()/2-1)&&l1<l2) //比較到最中間的兩個數是遞歸停止條件

j=1;

else if(s1!=s2&&l1>=(str.length()/2-1)&&l1<l2)

j=0;

else j=judge(str,n-1);

return j;

}

}

4、截圖

技術分享

方法---課程作業02