• 课程作业02


    课后作业1:使用计算机计算组合数:

    (1)使用组合数公式利用n!来计算

    设计思想:用公式的方法求组合数,利用递归方法,求出阶乘n!,k!,(n-k)!,求出组合数的大小。

    程序流程图:

    源代码:

    import java.util.Scanner;


    import java.lang.Math.*;


    import java.math.BigInteger;


    public class Zuheshu

    {


    public static BigInteger jiecheng(int n)


    {


    if(n<0)


         {


            System.out.println("输入有误");


          }


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


           {


               return BigInteger.valueOf(1);


            }


    else 


           {


           return BigInteger.valueOf(n).multiply(jiecheng((n-1)));


           }


    }


    public static long calculateN(int n)

    {


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

         {

          return 1;

             }


          return n*calculateN(n-1);


          }

    public static void main(String args[])


    {


    System.out.print("请输入组合数的n和k:");


    Scanner scanner1=new Scanner(System.in);//组合数的n

    int n=scanner1.nextInt();


    Scanner scanner2=new Scanner(System.in);//组合数的k


    int k=scanner2.nextInt();


    BigInteger x,y,z,d,result;

    x=jiecheng(n);


    y=jiecheng(k);


    z=jiecheng(n-k);


    d=y.multiply(z);//计算k!*(n-k)!


    result=x.divide(d);//计算n!/(k!*(n-k)!)


    System.out.println("组合数的结果是:"+result);//输出运算结果

    }

    }

    结果截图:

    (2)使用递推的方法用杨辉三角形计算

    设计思想:用递推的方法,由前往后递推,利用杨辉三角形找出规律,利用二元数组求出组合数的大小。

     程序流程图:

    源代码:

    import java.util.Scanner;


    import java.lang.Math.*;


    public class Zuheshu2

    {


    public static int n;


    public static int k;


    public static int c[][]=new int[100][100];


    Zuheshu2 a=new Zuheshu2();


    public static void main(String args[])


    {


    System.out.print("请输入组合数的n和k:");


    Scanner scanner1=new Scanner(System.in);//组合数的n


    int n=scanner1.nextInt();


    Scanner scanner2=new Scanner(System.in);//组合数的k


    int k=scanner2.nextInt();


    c[0][0]=1;//初始化


    c[1][0]=1;//初始化


    c[1][1]=1;//初始化


    for(int i=2;i<=n;i++)


    {

    c[i][0]=1;


    c[i][i]=1;//初始化每行 杨辉三角的两边的值


    for(int j=1;j<=i;j++)


    {


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


    }


    }


    System.out.println("组合数的结果是:"+c[n][k]);


    }


    }

     结果截图:

    (3)使用递归的方法用组合数递推公式计算

    设计思想:用递归函数的方法,由后往前调用递归公式,利用给出的组合数公式,初始化,求出组合数的大小,然后输出结果

    程序流程图:

    源代码:

    import java.util.Scanner;


    public class Zuheshu3

    {


    public static int n;


    public static int k;


    public static int c[][]=new int[100][100];


    public static void main(String args[])


    {


    System.out.print("请输入组合数的n和k:");


    Scanner scanner1=new Scanner(System.in);//组合数的n


    int n=scanner1.nextInt();


    Scanner scanner2=new Scanner(System.in);//组合数的k


    int k=scanner2.nextInt();


    c[0][0]=1;//初始化


    c[1][0]=1;//初始化


    c[1][1]=1;//初始化


    System.out.println("组合数的结果是:"+digui(n,k));


    }


    public static int digui(int n0,int k0)


    {


    if((k0==n0)||(k0==0))


    {


    return 1;


    }


    c[n0][k0]=digui(n0-1,k0)+digui(n0-1,k0-1);


    return c[n0][k0];


    }

    }

    结果截图:

    课后作业2:

    递归编程解决汉诺塔问题。用Java实现

    设计思想:递归算法
    当n=1时,将A上的盘子直接移动到C上
     当n>=2时:
     1,将A上n-1个盘子移动到B上(此步骤的解决办法与移动n阶盘子的方法完全一样
      只是问题的规模减小1阶
     2,将A上的一个盘子移动到C
     3,将B上的n-1个盘子移动到C上。

    源代码:

    import java.util.Scanner;

    public class Tower1


    {


    public static void tower(int n,char one,char two,char three)

    {


    if(n==1)

    {


    move(one,three,1);


    }

    else

    {


    tower(n-1,one,three,two);


    move(one,three, n);


    tower(n-1,two,one,three);


    }


    }
    //输出
    public static void move(char x,char y, int n)

    {


    System.out.println(x+"的第"+n+"盘移动到"+y);


    }


    public static void main(String[] args)

    {


    int level;


    Scanner in = new Scanner(System.in);


    System.out.println("请输入层数:");


    level = in.nextInt();


    Tower1.tower(level,'A','B','C');


    }


    }

    结果截图:

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

    设计思想:利用递归的方法,结合回文的定义,验证字符串是否为回文字符串

    程序流程图:

    源代码:

    package com.resource.test;

    import java.io.BufferedReader;

    import java.io.InputStreamReader;

    public class HuiWen
    {

    /**
    * 递归方法判断一个string是否是回文
    * 返回true表示当前字符串是一个回文字符串
    * 返回false表示该字符串不是回文字符串
    * @param args
    */

    public static void main(String[] args)throws Exception
    {
    String str ="";

    BufferedReader br = new BufferedReader(
    new InputStreamReader(System.in),256);
    System.out.println("请输入待检验的字符串:");
    str = br.readLine();

    System.out.println("检查结果: " + huiwen(str,0,str.length()-1));

    }

    public static boolean huiwen(String s,int start,int end)

    {

    if(start == end) return true;

    if(start > end)

    {

    System.out.println("您没有输入任何字符串!");

    return false;

    }

    if(s.charAt(start) == s.charAt(end))

    {

    return huiwen(s,start+1,end-1);

    }

    else

    {

    return false;

    }

    }

    }

    结果截图

  • 相关阅读:
    获取URL中参数
    Javascript this指针
    10分钟了解C#中的协变和逆变
    BCB写的简单的EXCEL合并
    Codeforces Round #316 (Div. 2) D
    Codeforces Round #316 (Div. 2) E
    fzu1873 Coin Puzzle
    hdu 3629 Convex
    几何统计 ACM ICPC
    hdu 5135 Little Zu Chongzhi's Triangles
  • 原文地址:https://www.cnblogs.com/tianzeyangblog/p/7664250.html
Copyright © 2020-2023  润新知