課程作業:將課程作業01、02、03的設計思想、程式流程圖、源程式程式碼和結果截圖整理成一篇博文,發表到你的部落格園。

我命傾塵發表於2017-10-13

課程作業01

課後作業1_1:

設計思想:輸入C(n,k)中的n,k值,利用n!,採用組合數公式直接進行計算方式求得組合數。

程式流程圖:

   

源程式程式碼:

 1 package zuheshu;
 2 import java.math.BigInteger;
 3 import java.util.Scanner;
 4 public class Zuheshu
 5 {
 6     public static void main(String[] args)
 7     {
 8         Scanner con=new Scanner(System.in);
 9         System.out.println("請輸入組合數中的n值和k值:");
10         int a=con.nextInt();
11         int b=con.nextInt();
12         if(a<b)
13         {
14             System.out.println("不符合要求,請重新輸入:");
15              a=con.nextInt();
16              b=con.nextInt();
17         }
18         System.out.println("n和k構成的組合數值C(n,k)為:"+ca(a).divide(ca(b)).divide(ca(a-b)));
19     }
20     public static BigInteger ca(int n)
21     {
22         if(n==1 || n==0)
23        {
24             return BigInteger.valueOf(1);
25         }
26           return BigInteger.valueOf(n).multiply(ca((n-1)));
27     }
28 }    

結果截圖:

   

課後作業1_2:

設計思想:使用遞推的方法,先兩兩疊加求得n+1層的楊輝三角存入二維陣列中,再取n+1層的k+1項數值即為要求的C(n,k)值。

程式流程圖:

   

源程式程式碼:

 1 package zuheshu;
 2 import java.util.Scanner;
 3 public class Zuheshu2
 4 {
 5     public static void main(String[] args)
 6     {
 7         int[][] n=new int[20][20];
 8         Scanner con=new Scanner(System.in);
 9         System.out.println("請輸入組合數中的n值和k值:");
10         int a=con.nextInt();
11         int b=con.nextInt();
12         if(a<b)
13         {
14             System.out.println("不符合要求,請重新輸入:");
15              a=con.nextInt();
16              b=con.nextInt();
17         }
18         for(int h=0;h<a+1;++h)
19             for(int w=0;w<=h;++w)
20             {
21                 if(h==w||w==0)
22                     n[h][w]=1;
23                 else
24                     n[h][w]=n[h-1][w]+n[h-1][w-1];
25             }
26         System.out.println("n和k構成的組合數值C(n,k)為:"+n[a][b]);
27     }
28 }    

結果截圖:

   

課後作業1_3:

設計思路:輸入C(n,k)中的n和k,使用遞迴的方法用組合數遞推公式計算求值。

程式流程圖:

   

源程式程式碼:

 1 package zuheshu;
 2 import java.util.Scanner;
 3 public class Zuheshu3
 4 {
 5    public static void main(String[] args)
 6    {
 7         Scanner con=new Scanner(System.in);
 8         System.out.println("請輸入組合數中的n值和k值:");
 9         int a=con.nextInt();
10         int b=con.nextInt();
11         if(digui(a,b)==0)
12         {
13             System.out.println("不符合要求,請重新輸入:");
14              a=con.nextInt();
15              b=con.nextInt();
16         }
17         System.out.println("n和k構成的組合數值C(n,k)為:"+digui(a,b));
18    }
19    public static int digui(int x,int y)
20    {
21        if(x<y)
22            return 0;
23        if(x==y)
24            return 1;
25        if(y==1)
26            return x;
27            return digui(x-1,y-1)+digui(x-1,y);
28    }
29 }

結果截圖:

   

課後作業2:

設計思路:採用遞迴演算法進行漢諾塔每層的移動,輪流使用目標塔和初始塔作為輔助塔,完成所有塔層的位移。

程式流程圖:

   

源程式程式碼:

 1 package hannuota;
 2 import java.util.Scanner;
 3 public class Hannuota
 4 {
 5     static int t=1;
 6     public static void main(String[] args)
 7     {
 8         Scanner con=new Scanner(System.in);
 9         System.out.println("請輸入漢諾塔層數:");
10         int g=con.nextInt();
11         System.out.println("漢諾塔移動步驟為:");
12         hannuota(g,"A","B","C");
13     }
14     public static void hannuota(int n,String ta1,String ta2,String ta3)
15     {
16         if(n==1)
17             move(ta1,ta3);
18         else
19         {
20             hannuota(n-1,ta1,ta3,ta2);
21             move(ta1,ta3);
22             hannuota(n-1,ta2,ta1,ta3);
23         }
24     }
25     public static void move(String x,String y)
26     {
27         System.out.println("第"+t+"步為:"+x+" -->> "+y);
28         t+=1;
29     }
30 }

結果截圖:

   

 

課後作業3:

設計思路:輸入字串後,呼叫toCharArray函式將字串轉化成字元陣列,然後遞迴對比首尾字元並向內兩兩縮排,比較次數超過字元陣列長度一半就跳出,說明比較完畢,則輸出是迴文字串,中途若有判斷為不是的,則返回false。

程式流程圖:

   

源程式程式碼:

 1 package huiwen;
 2 import java.util.Scanner;
 3 public class Huiwen
 4 {
 5     static char[] c;
 6     public static void main(String[] args)
 7     {
 8         Scanner con=new Scanner(System.in);
 9         String s=con.next();
10         c=s.toCharArray();
11        if(panduan(0)==true)
12            System.out.println("該字串是迴文字串");
13        else
14            System.out.println("該字串不是迴文字串");
15     }
16     public static boolean panduan(int n)
17     {
18         if(n>=c.length/2)  
19             return true;
20         else if(c[n]==c[c.length-1-n])  
21             return panduan(n+1);
22         else return false;
23     }
24 }

結果截圖:

   

   

相關文章