• 课堂作业02-1 将课程作业01、02、03的设计思想、程序流程图、源程序代码和结果截图整理成一篇博文


    课程作业01

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

    (1)     设计思想

    运用递归阶乘的函数,依次求出n!、k!、(n-k)!,再根据组合数的公式计算(n!/(k!*(n-k)!)).

    (2)     流程图

    3)源代码

    package zuoye1;

     

    import java.util.Scanner;

    public class zuhe

     

    {

     public static void main(String[] args)

     

         {

     

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

     

             @SuppressWarnings("resource")

     

                   Scanner scanner=new Scanner(System.in);

             int zuhe1=scanner.nextInt();

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

             int zuhe2=scanner.nextInt();

             int zuhe3=calculateN(zuhe1-zuhe2);

             int zuhe4=calculateN(zuhe1)/(calculateN(zuhe2)*zuhe3);

             System.out.println("组合数为:"+zuhe4);      

          }

       

         public static int calculateN(int n)//递归阶乘算法函数

         {

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

             {

                return 1;

             }

             return n*calculateN(n-1);

         }

     }

    4)结果截图

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

    (1)设计思想

    利用JAVA中的BigInteger方法可以准确的求一个数的阶乘,利用递归的方法就是利用杨辉三角的原理,一个数等于它的左上角和右上角的两个数的和,通过递归调用方法本身求出结果,通过不断的递归调用就能求出最终的结果。

    (2)流程图

    3)源代码

    package zuoye1;

     

    import java.math.BigInteger;

    import java.util.Scanner;

    public class yanghui

    {

           int n;

        int k;

        void yanghui(intnumber1,intnumber2)

        {

            n=number1;

               k=number2;

        }

        public void get()

        {

              System.out.println(calculation21(n+1,k+1));

         }

           private char[] calculation21(int i, int j)

           {

                  return null;

           }

          

           public int calculation2(int n,int k)

           {

               if(k==1||k==n)

               return 1;

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

               return 1;

                  return k;

           

           }

          

           public static void main(String[] args)

           {

                  Scanner Input=new Scanner(System.in);

               System.out.print("输入n的值:");

               int number1=Input.nextInt();

               System.out.print("输入k的值:");

               int number2=Input.nextInt();

               while(number2<0||number2>number1)

                {

                     System.out.print("请输入一个≥0并且≤n的数:");

                     number2=Input.nextInt();

                }

                yanghui A=new yanghui();

             System.out.print("使用递推的方法用杨辉三角形计算的结果:");

                A.get();

           }

    }

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

    1)设计思想

    设计思想:首先定义组合数中的两个数,调用方法,并且在方法中在调用自己,完成递归,最后输出正确的结果。package 使用递归的方法用组合数递推公式计算;

    (2)流程图

    3)源代码

    package zuoye1;

     

    public class digui

    {

                  public static void main(String[] args)

                  {

                      int a=4;

                      int b=5;

                      System.out.println("C("+a+","+b+")="+gNum(a,b));

                  }

                  public static int gNum(int m,int n)

                  {

                     if(m==0||m==n)

                     return 1;

                     else return gNum(m-1,n-1)+gNum(m,n-1);

                  }

     

    }

    4)结果截图

     

    课程作业02

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

    (1)设计思想

    设置abc三个字符型变量用来表示三个塔,定义一个move函数,用来存储汉诺塔解决的方法,当m(环的个数)=1时,直接将盘子从a移动到c即可,如果盘子个数超过2,就用递归的思想解决。

    (2)流程图

    3)源代码

    package zuoye2;

    import javax.swing.JOptionPane;

     

    public class hannuota

    {

        public static void main(String args[])

        {

               String s=" ";

             s=JOptionPane.showInputDialog("请输入环的个数");

             int j=0;

            char a='a',b='b',c='c';

             j=Integer.parseInt(s);

            move(j,a,b,c);

          }

          public static void move(int m,char a,char b,char c)

            {

                  if(m==1)

                 {

                      System.out.println(a+"->"+c);

                   }

           

                else

               {

                 move(m-1,a,c,b);

             System.out.println(a+"->"+c);

                move(m-1,b,a,c);

            }

          }

       }

    4)结果截图

     

     

    课程作业03

    使用递归方式判断某个字串是否是回文( palindrome )

    “回文”是指正着读、反着读都一样的句子。比如“我是谁是我”

    使用递归算法检测回文的算法描述如下:

    A single or zero-character string is a palindrome.

    Any other string is a palindrome if the first and last characters are the same, and the string that remains, excepting those characters, is a palindrome.

     

    (1)设计思想

    定义main函数,定义两个整型变量i,j用来表示字符串的位置下标。再定义一个布尔类型的函数judge用来判断字符串是否为回文字符串。如果字符串长度为1,直接返回true,如果字符串长度大于1,则递归判断。每次判断结束后,i+1,j-1,直到判断结束。

    (2)流程图

    3)源代码

    package zuoye3;

     

    import java.util.Scanner;

    public class panduan

    {

           public static void main(String[] args)

       {

          String str=" ";

          System.out.println("请输入要判断的字符串(true表示回文字串,false表示非回文字串)");

          Scanner input=new Scanner(System.in);

          str=input.next();

          int i=0;

          int j=str.length()-1;

          System.out.println(panduan.judge(str,i,j));

       }

         public static boolean judge(String s,int i,int j)

        {

               if(i>j)

             throw new IllegalArgumentException();

             if(i==j)

             return true;

             else

             {

                  return(s.charAt(i)==s.charAt(j)) && judge(s,i+1,j-1);

             }

         }

    }

    4)结果截图

     

     

  • 相关阅读:
    唯一索引 && 主键索引
    部分函数依赖 && 完全函数依赖
    范式
    BST树、B树、B+树、B*树
    哈希表
    Bzoj4569: [Scoi2016]萌萌哒
    Bzoj 4551: [Tjoi2016&Heoi2016]树
    Bzoj3631: [JLOI2014]松鼠的新家
    HDU4746: Mophues
    BZOJ2820:YY的GCD
  • 原文地址:https://www.cnblogs.com/yanghanyu981005/p/7664321.html
Copyright © 2020-2023  润新知