2方法(课后作业)

课后作业1:组合数

1)程序设计思想

若使用组合数公式计算C(n,k)需要n!使用,计算n!使用递归算法BigInteger calculateN(int n);
若使用递推的方法计算,则需要明白杨辉三角形与组合数的关系,则转化为杨辉三角形的计算,通过杨辉三角形的性质,a[i][j]=a[i-1][j-1]+a[i-1][j];
若使用递归的方法计算,则根据C(n+1,k)=C(n,k-1)+C(n,k)进行递归,需要注意的是进行要给足初始条件。

 

2)程序流程图

BigInteger CombineN(int n,int k)

 

BigInteger Combine(int n,int k);BigInteger calculateN(int n)

 

BigInteger CombineSanjiao(int n,int k)

3)源程序代码

 1 package opinion;
 2 import java.math.BigInteger;
 3 import java.util.Scanner;
 4 public class CombianNum {
 5     public static BigInteger calculateN(int n) {
 6         if(n==1 || n==0){
 7             return BigInteger.valueOf(1);
 8         }
 9         return BigInteger.valueOf(n).multiply(calculateN((n-1)));
10     }
11     public static BigInteger Combine(int n,int k)
12     {    
13         return calculateN(n).divide(calculateN(k).multiply(calculateN(n-k)));
14     }
15     public static BigInteger CombineN(int n,int k)
16     {
17         if((n==k)||(n==1&&k==0))
18             return BigInteger.valueOf(1);
19         else if(k==1)
20             return BigInteger.valueOf(n);
21         else
22             return CombineN(n-1,k-1).add(CombineN(n-1,k));            
23     }
24     public static BigInteger CombineSanjiao(int n,int k)
25     {
26         int [][]triangle=new int[100][100];
27         int i,j;
28         for(i=0;i<n;i++)
29         {
30            triangle[i][i]=triangle[i][0]=1;
31         }
32         for(i=2;i<=n;i++)
33         {
34             for(j=1;j<=k;j++)
35             {
36                 triangle[i][j]=triangle[i-1][j-1]+triangle[i-1][j];
37             }
38         }
39         return BigInteger.valueOf(triangle[n][k]);
40     }
41     public static void main(String[] args)
42     {
43         Scanner scanner=new Scanner(System.in);
44         System.out.println("请输入组合数的上标");
45         int under_num=scanner.nextInt();
46         System.out.println("请输入组合数的下标");
47         int beside_num=scanner.nextInt();
48         System.out.println("使用递归方法得该组合数结果为"+CombineN(beside_num,under_num));//由后至前
49         System.out.println("使用公式法得该组合数结果为"+Combine(beside_num,under_num));
50        System.out.println("使用递推方法得该组合数结果为"+CombineSanjiao(beside_num,under_num));
51     }
52 }

4)结果截图

课后作业2(递归编程解决汉诺塔问题)

1)程序设计思想

将n个盘子从A座移到C盘可以分解为以下3个步骤:

(1)将A上的n-1个盘借助C座先移到B座上;

(2)把A座上剩下的一个盘移到C盘上;

(3)将n-1个盘从B盘借助于A座移到C座;

2)程序流程图

void hanoi(int n,char one,char two,char three) 

 

void move(char x,char y)

 

3)源程序代码

 

 1 package opinion;
 2 import java.util.*;
 3 public class Hanoi {
 4 public static void main(String []args)
 5 {
 6     Scanner scanner=new Scanner(System.in);
 7     System.out.println("input the number of diskes:");
 8     int num=scanner.nextInt();
 9     System.out.println("The step to move "+num+" diskes");
10     hanoi(num,'A','B','C');
11     }
12 public static void hanoi(int n,char one,char two,char three)
13 {
14     if(n==1)
15         move(one,three);
16     else 
17     {
18         hanoi(n-1,one,three,two);
19         move(one,three);
20         hanoi(n-1,two,one,three);
21     }
22     }
23 public static void move(char x,char y)
24 {
25     System.out.println(x+"->"+y);
26 }
27 }

 

 

4)结果截图

 课后作业3(使用递归方式判断某个字串是否是回文)

1)程序设计思想

当字符串为空或者单个字符时,根据字符串长度,判断首尾是否相等,若相等再通过递归,截取下一个字符串,再进行验证,最后输出字符串是为回文。当中某一对不相等,则不是回文。

2)程序流程图

 

 

 int Plength(String str)

3)源程序代码

 

 1 package opinion;
 2 import java.util.*;
 3 public class Palindsome {
 4     
 5 public static void main(String []args)
 6 {
 7     Scanner scanner=new Scanner(System.in);
 8     System.out.println("请输入字符串");
 9     String s=scanner.nextLine();
10     if(Plength(s)==1)
11         System.out.println("这个字符串是回文");
12     else
13         System.out.println("这个字符串不是回文");
14     }
15 public static int Plength(String str)
16 {
17     if(str.length()==0||str.length()==1)
18         return 1;
19     else
20     {
21         char First=str.charAt(0);
22         char End=str.charAt(str.length()-1);
23         if(First!=End)
24             return 0;
25     }
26     return Plength(str.substring(1, str.length()-1));//截取字符串中的子串
27 }
28 }

 

4)结果截图

 

 

 

转载于:https://www.cnblogs.com/watm/p/7660396.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值