课后作业02

课后作业01 组合数

1.设计思想:我们先设计一个函数A(int n)用来求n的阶乘,

然后再设计一个函数B(int n,int k)求组合数,B函数调用

A函数代入组合式公式,极为方便。最后在主函数中进行输入

,调用。

2.程序流程:

第一步 设计一个函数int型A(int n)用来求n的阶乘并返回

第二步 设计一个int型的函数B(int n,int k)用来求组合数,调用A使其简化,最后返回所求的组合数

第三步 在main方法中定义n和k,进行输入赋值

第四步 判断n是否大于k如果n比k小错误提示然后退出

第五步 调用B函数求组合数

3.程序源代码:

import java.util.*;
public class Zuheshu {
  public static int JC(int n)
    {
      if(n==0||n==1)return 1;
      else return n*JC(n-1);

 

    }
  public static int Cnk(int n,int k)
    {
      return JC(n)/(JC(k)*JC(n-k));

 

    }


  public static void main(String args[])
    {

      int n,k;
      Scanner put=new Scanner(System.in);
      //System.out.println();
      System.out.println("请输入n和k:");
      n=put.nextInt();
      k=put.nextInt();
      if(k>n) {System.out.println("输入错误!");System.exit(-1);}
      System.out.println("组合数C n k为:");
      System.out.println(Cnk(n,k));
      System.out.println("组合数C n k-1为:"+Cnk(n,k-1));
      System.out.println("组合数Cnk 加上组合数Cnk-1为:"+(Cnk(n,k)+Cnk(n,k-1)));
      System.out.println("组合数C n+1 k为:"+Cnk(n+1,k));

    }

}

4.截图:

课后作业02 汉诺塔

1.设计思想:汉诺塔的递归问题吧A柱子上的盘子移到C

当n=1时我们需把A上的最后一个盘子移到C,但不是的

话我们都要分三步走:

(1)把A上的n-1个盘子借助C移到B

(2)把A上的第n个盘子移到C

(3)把B上的n-1个盘子借助A移到C

2.程序流程:

第一步 设计一个函数move(A,n,B)意思是把A上的第n个盘子移到C

第二步 设计函数hanoi(n,A,B,C)意思是把A上的n个盘子借助B移到C

第三步  如果n=1即递归的条件只需move(A,1,C)直接把他移到C

第四步 如果n不为1,把A上的n-1个盘子借助C移到B,然后最后一个盘子

    直接移到C,再把B上的n-1个盘子借助A移到C

3程序源代码:

import java.util.*;
public class Hanoi {

  public static void move(char A,int n,char C)
    {

      System.out.println(n+","+A+","+C);

    }

  public static void hano(int n,char A,char B,char C)
    {
      if(n==1)move(A,1,C);
      else
        {
          hano(n-1,A,C,B);
          move(A,n,C);
          hano(n-1,B,A,C);
        }

    }

  public static void main(String args[])
    {
      int n;
      char A=65,B=66,C=67;
      Scanner put=new Scanner(System.in);
      System.out.println("请输入n:");
      n=put.nextInt();

      hano(n,A,B,C);

    }

}

4.截图:

课后作业 03 回文字符串

1.设计思想:回文字符串类似于回文数,我们可以借助字符串的length,

通过length进行递归运算,比较第n个和第length-n,如果相等就递归下去,

否则返回flase,n从0到第length/2个

2.程序流程:

第一步 设计一个boolean函数用来判断回文数

第二步 递归比较第n个和第length-n个如果相等就继续递归,否则返回flase,n从第一个到第length/2个

第三步 通过main函数输入字符串,调用函数判断

3.程序源代码:

package 回文;
import java.util.*;
public class huiwen {
    public static void huiwenshu(String C)
      {
        StringBuffer sb=new StringBuffer(C);
        sb.reverse();
        int cout=0;
        for(int i=0;i<C.length();i++)
          {if(C.charAt(i)==sb.charAt(i))
            {
              cout++;
            }
          }
        if(cout==C.length()){System.out.println("该字符串是回文字符串!");}
        else {System.out.println("该字符串不是回文字符串!");}


      }
    public static void main(String args [])
      {
        Scanner put=new Scanner(System.in);

        System.out.println("请输入一个字符串:");
        String A,B;
        A=put.nextLine();
        huiwenshu(A);


      }

}

4.程序截图:

posted on 2017-10-13 14:20  雁夜  阅读(126)  评论(0编辑  收藏  举报