课程作业02-汇总整理

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

设计思想:

利用组合数公式计算,通过对n、k、(n-k)的阶乘进行递归,实现求组合数。

程序流程图:

 

源程序代码:

package zuheshu;

import java.util.Scanner;

public class Zuheshu

{

       public static void main(String[] args) {

              long k,n,s;

              Scanner input=new Scanner(System.in);

              System.out.println("请输入k和n的值:");

              k=input.nextInt();

              n=input.nextInt();

              s=fun(n)/(fun(k)*fun((n-k)));

              System.out.print("计算结果为:"+s);

       }

       public static long fun(long n)

    {

              int sum=1;

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

              {

                     sum=sum*i;

              }

              return sum;

       }

}

 

结果截图:

 

 

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

设计思想:

杨辉三角可以反映组合数的值,通过递归建立杨辉三角,再通过杨辉三角输出组合数的值。

程序流程图:

 

源程序代码:

import java.util.Scanner;

 

public class Zuheshu2

{

       public static void main(String[] args)

       {

              Scanner input=new Scanner(System.in);

              System.out.println("请输入n和m的值");

              int n=input.nextInt();

              int m=input.nextInt();

              if(m<n)

              {

                     System.out.println("输入错误!");

              }

              else

                     System.out.println("C"+"["+n+","+m+"]"+"="+yanghui(n,m));

       }

       public static int yanghui(int n,int m)

       {

              int a[][]=new int[m+1][m+1];

              for(int i=0;i<m+1;i++)

              {

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

                     {

                            a[i][j]=0;

                     }

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

                     {

                            if(j==0)

                            {

                                   a[i][j]=1;

                            }

                            else

                            {

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

                            }

                     }

              }

              return a[m][n];

       }

}

 

结果截图:

 

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

设计思想:

通过对组合数递推公式的递归实现,输出组合数的数值。

程序流程图:

 

源程序代码:

import java.util.Scanner;

 

public class Zuheshu3

{

       public static void main(String[] args)

       {

              Scanner input=new Scanner(System.in);

              System.out.println("请输入n和m的值");

              int n=input.nextInt();

              int m=input.nextInt();

              System.out.println("C"+"["+m+","+n+"]"+"="+digui(n,m));

       }

       public static int digui(int n,int m)

       {

              if(m<n)

              {

                     System.out.println("输入错误!");

              }

              if(n==1)

              {

                     return m;

              }

              if(m==n)

              {

                     return 1;

              }

              return digui(n-1,m-1)+digui(n,m-1);

       }

}

 

结果截图:

 

4.汉诺塔问题

设计思想:

1.首先利用界面将输出语句输出;

2.设置abc三个字符型变量用来表示三个塔;

3.定义一个move函数,用来存储汉诺塔解决的方法;

4.当m(环的个数)=1时,直接将盘子从a移动到c即可;

5.如果盘子个数超过2,就用递归的思想解决;

6.第一处递归:move(m-1,a,c,b)实现将m-1个环从a,借助c,移动到b

7.a->c实现将第n个环从a移动到c

8.第二处递归:move(m-1,b,a,c)实现将m-1个环从b,借助a,移动到c

程序流程图:

源程序代码:

//汉诺塔问题

package hannuota;

import javax.swing.JOptionPane;

 

public class main {

       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);

              }

       }

}

结果截图:

 

5.回文字符串问题

设计思想:

1.首先定义main函数,定义两个整型变量i,j用来表示字符串的位置下标,从零开始。

2.接着定义一个布尔类型的函数judge用来判断字符串是否为回文字符串。

3.如果字符串长度为1,直接返回true

4.如果字符串长度大于1,则递归判断。每次判断结束后,i+1,j-1,直到判断结束。

程序流程图:

源程序代码:
//输入一个字符串,判断其是否为回文字串
package palindrome;
import java.util.Scanner;

public class Huiwen
{
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(Huiwen.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);
}
}
}

 结果截图:

posted @ 2017-10-13 23:21  博呀客  阅读(157)  评论(0编辑  收藏  举报