zoukankan      html  css  js  c++  java
  • 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)结果截图

     

  • 相关阅读:
    Sql Server中的游标最好只用于有主键或唯一键的表
    SQLServer中DataLength()和Len()两内置函数的区别(转载)
    Sql server bulk insert
    ASP.NET CORE中使用Cookie身份认证
    用.net中的SqlBulkCopy类批量复制数据 (转载)
    使用C#的AssemblyResolve事件和TypeResolve事件动态解析加载失败的程序集
    Entity framework 中Where、First、Count等查询函数使用时要注意
    注意SSIS中的DT_NUMERIC类型转换为字符类型(比如DT_WSTR)时,会截断小数点前的0
    记一次完整的android源码截屏事件的捕获<标记砖>
    ffmpeg添加水印的方法举例 (砖)
  • 原文地址:https://www.cnblogs.com/watm/p/7660396.html
Copyright © 2011-2022 走看看