课堂作业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)结果截图

 

 

posted @ 2017-10-14 00:44  小丑女  阅读(189)  评论(0编辑  收藏  举报