课程作业:将课程作业01、02、03的设计思想、程序流程图、源程序代码和结果截图整理成一篇博文,发表到你的博客园。

课程作业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 }

结果截图:

   

   

posted @ 2017-10-13 17:04  我命倾尘  阅读(511)  评论(0编辑  收藏  举报