zoukankan      html  css  js  c++  java
  • Java方法课程作业1,2,3

    课程作业01

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

    程序设计思想:

    (大数据整数)

    先定义一个取值上标和下标的函数得到nk,和阶乘的函数;

    通过阶乘函数返回得到n!k!(n-k)!(其中均为大数据整数的计算方法);

    计算n!/[k!*(n-k)!]

    程序流程图:

     

    源程序代码:

    import java.util.Scanner;

    import java.math.BigInteger;

    public class Combinatorics {

    int n;//组合数的下标

        int k;//组合数的上标

    public static void main(String[] args) {

    // TODO Auto-generated method stub

           Combinatorics c=new Combinatorics();

           c.getBiao();

           BigInteger x,y,z,C,d;//定义大数据整数

           x=c.jiecheng(c.n);//得到n!

           y=c.jiecheng(c.k);//得到k!

           z=c.jiecheng(c.n-c.k);//得到(n-k)!

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

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

           System.out.println("组合数Cnk="+C);

    }

        public void getBiao()//得到组合数的上标和下标

        {

         System.out.println("请输入组合数的下标和上标:");

    Scanner scanner=new Scanner(System.in);

    n=scanner.nextInt();//输入下标

    k=scanner.nextInt();//输入下标

        }

        public BigInteger jiecheng(int n0)//计算输入的整数的阶乘

        {

         BigInteger ji=BigInteger.ONE;//定义大数据整数ji

         for(int i=1;i<=n0;i++)//循环可得到n0!

         {

           ji=ji.multiply(BigInteger.valueOf(i));

         }

         return ji;//返回积

        }

    }

    程序截图:

     

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

    程序设计思想:

    先输入组合数的上标和下标,定义二维数组方便存放数据;

    初始化二维数组最开始的几个值,方便递推运算;

    利用递推关系得到赋予二维数组值;

    组合数Cnk就等于c[n][k].

    程序流程图:

     

    源程序代码:

    import java.math.BigInteger;

    import java.util.Scanner;

    public class Combinatorics {

    public static int n;//组合数的下标

        public static int k;//组合数的上标

        public static int c[][]=new int[100][100];//定义二维数组

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    System.out.println("请输入组合数的下标和上标:");

    Scanner scanner=new Scanner(System.in);

    n=scanner.nextInt();//输入下标

    k=scanner.nextInt();//输入上标

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

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

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

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

    {

    c[i][0]=1;//k=0

    c[i][i]=1;//k=n

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

      {

       c[i][j]=c[i-1][j-1]+(c[i-1][j]);//递推

      }

    }

    System.out.println("组合数Cnk="+c[n][k]);//输出Cnk的值

      }

    }

    程序截图:

     

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

    程序设计思想

    先输入组合数的上标和下标,定义二维数组方便存放数据;

    定义递归函数;

    初始化二维数组最开始的几个值,用递归函数完成递推运算,赋予二维数组值;

    组合数Cnk就等于c[n][k].

    程序流程图:

     

    源程序代码:

    import java.util.Scanner;

    public class Combinatorics {

    int n;//组合数的下标

        int k;//组合数的上标

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

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Combinatorics m=new Combinatorics();//构造函数

    System.out.println("请输入组合数的下标和上标:");

    Scanner scanner=new Scanner(System.in);

    m.n=scanner.nextInt();//输入下标

    m.k=scanner.nextInt();//输入上标

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

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

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

    m.c[m.n][m.k]=m.digui(m.n,m.k);//调用递归函数

    System.out.println("组合数C"+"("+m.n+")"+"("+m.k+")"+"="+m.c[m.n][m.k]);//输出组合数Cnk

      }

    public 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(汉诺塔)

    程序设计思想:

    调用递归函数hanoi,其终止条件为hanoi函数的参数n的值为1

    此程序只是输出移动的方案。

    程序流程图:

     

    源程序代码:

    import java.util.Scanner;

    public class Hannuota {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Hannuota h=new Hannuota();//定义一个引用函数

    int m;//要挪动的个数

    System.out.print("请输入要挪动的个数:");

    Scanner scanner=new Scanner(System.in);

    m=scanner.nextInt();//输入m

    System.out.println("移动的步骤为:");

    h.hanoi(m,"peg1","peg2","peg3");//调用hanoi函数

    }

    public void hanoi(int n,String one,String two,String three)

    {//将n个盘从one座借助two座,移到three座

    if(n==1)

    {

    System.out.println(one+"->"+three);//输出该步骤

    }

    else

    {

    hanoi(n-1,one,three,two);//调用自己

    System.out.println(one+"->"+three);

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

    }

    }

    }

    程序截图:

     

    课后作业3

    程序设计思想:

    先输入要判断的字符串;

    定义递归函数(其中是判断action是否等于over,若是则返回true(回文字符串),否则继续调用自己返回值);

    最后判断返回值,看是否是字符串。

    程序流程图:

     

    源程序代码:

    import java.util.Scanner;

    public class Huiwen {

    public static void main(String[] args) {

    // TODO Auto-generated method stub

    Huiwen h=new Huiwen();//定义一个引用

    String zifuchuan="";

    System.out.print("输入你要进行判断的字符串:");

    Scanner sr=new Scanner(System.in);

    zifuchuan=sr.next();//输入要判断的字符串

    int i=zifuchuan.length();//字符串的长度

    boolean b=h.diguiPanduan(zifuchuan,0,i-1);//对递归函数的调用,将返回值赋予b

    if(b==true)//判断布尔类型b

    {

    System.out.println("该字符串是回文字符串");

    }

    else

    {

    System.out.println("该字符串不是回文字符串");

    }

    }

    public boolean diguiPanduan(String s,int action,int over)//递归函数

    {

    if(action==over)

    {

    return true;//返回值

    }

    else if(s.charAt(action)==s.charAt(over))//判断字符是否相等

    {

    return diguiPanduan(s,action+1,over-1);//对自身的调用

    }

    else

    {

    return false;//返回值

    }

    }

    }

    程序截图:

     

  • 相关阅读:
    python 字符串中的%s与format
    python中的virtualenv是干嘛的?
    grep 与 find 简单命令
    git merge 和 git rebase的区别
    git stash的用法
    git push的用法
    git pull与git fetch的区别
    辟谣平台 踩坑记(一)
    微信JS-SDK开发 入门指南
    linux 写U盘出现的问题
  • 原文地址:https://www.cnblogs.com/lovema1210/p/7658194.html
Copyright © 2011-2022 走看看