课堂作业02程序设计作业

课后作业1:

1.设计思想:

(1)适用组合数公式:先用递归方法,求出阶乘,然后求出组合数的大小。

(2)使用递推的方法:递推是由前往后退,通过杨辉三角找出规律,利用二元数组求出组合数的大小。

(3)使用递归的方法:由前往后调用递归公式,利用组合数公式,初始化值,求出组合数的大小。

2.程序流程图:

 

 

 

3.源程序代码:

(1)使用组合数公式的代码:

package zuheshu;
import java.util.Scanner;
import java.lang.Math.*;
import java.math.BigInteger;
public class Zuheshu {
//组合数公式
 public static BigInteger jiecheng(int n)
 {
   if(n<0)
   {
    System.out.println("输入有误");
   }
   if(n==1||n==0)
   {
    return BigInteger.valueOf(1);
   }
   else
   {
    return BigInteger.valueOf(n).multiply(jiecheng((n-1)));
   }
   
 }
 public static long calculateN(int n){
  if(n==1||n==0){
   return 1;
  }
  return n*calculateN(n-1);
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
    System.out.print("请输入组合数的n和k:");
    Scanner scanner1=new Scanner(System.in);
    int n=scanner1.nextInt();
    Scanner scanner2=new Scanner(System.in);
    int k=scanner2.nextInt();
    BigInteger x,y,z,d,result;
    x=jiecheng(n);
    y=jiecheng(k);
    z=jiecheng(n-k);
    d=y.multiply(z);
    result=x.divide(d);
    System.out.println("组合数的结果是:"+result);
 }

}

结果截图:

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

代码:

package zuheshu;
import java.util.Scanner;
import java.lang.Math.*;
public class Zuheshu1 {
    public static int n;
    public static int k;
    public static int c[][]=new int[100][100];
    Zuheshu a=new Zuheshu();
 public static void main(String[] args) {
  // TODO Auto-generated method stub
      System.out.println("请输入组合数的n和k:");
      Scanner scanner1=new Scanner(System.in);
      int n=scanner1.nextInt();
      Scanner scanner2=new Scanner(System.in);
      int k=scanner2.nextInt();
      c[0][0]=1;
      c[1][0]=1;
      c[1][1]=1;
      for(int i=2;i<=n;i++)
      {
       c[i][0]=1;
       c[i][i]=1;
       for(int j=1;j<=i;j++)
       {
        c[i][j]=c[i-1][j-1]+c[i-1][j];
       }
      }
      System.out.println("组合数的结果是:"+c[n][k]);
 }

}

运行结果截图:

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

代码:

package zuheshu;
import java.util.Scanner;
public class Zuheshu2 {
    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.print("请输入组合数的n和k:");
      Scanner scanner1=new Scanner(System.in);//组合数的下标
      int n=scanner1.nextInt();
      Scanner scanner2=new Scanner(System.in);//组合数的上标
      int k=scanner2.nextInt();
      c[0][0]=1;//初始化
      c[1][0]=1;//初始化
      c[1][1]=1;//初始化
      System.out.println("组合数的结果是:"+digui(n,k));
      }
      public static 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:

1.设计思想:

一、建立一个Hannuota的类,储存环的个数以及移动时所需要的变量;

二、建立一个move的函数,用来实现移动方式的列举

三、利用递归方法解决此问题,用条件语句实现此方法。

2.程序流程图:

 

3.源程序代码:

import javax.swing.JOptionPane;

public class Hannuota {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
      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.结果截图:

 

课后作业3:

1.设计思想:

一、建立一个Palindrome类,用来储存全局变量整型数据和全局变量数组

二、输入字符串,令其长度为数组长度,将字符串转换为相应数组,用于比较对应位置字符是否相等。

三、从字符数组第一个函数开始比较,因为第一个字符下标为0,所以0为参数。

四、利用递归结束的条件判断是否是回文数。满足任何一个条件,结束递归。

2.程序流程图:

 

3.源程序代码:

import java.util.Scanner;
public class Palindrome
{
    private static int len;//全局变量整型数据
    private static char p[];//全局变量数组

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


       String str;
       str=sc.nextLine();
       len=str.length();//令len的值为数组长度
       p=str.toCharArray();//将字符串转换为相应数组,用于比较对应位置字符是否相等。


       //从字符数组第一个函数开始比较。因为第一个字符下标为0,所以以0为参数:if(isPalindrome(0))
        if(isPalindrome(0)) System.out.println(str+" is a palindrome!");
        else System.out.println(str+" is not a palindrome!");

     }


     public static boolean isPalindrome(int n)
     {
     if(n>=len/2)   return true;  //递归结束的条件之1:整个字符串的字符都一一对比完了,没有出现字符不等的情况,故该字串是回文。
      else if(p[n]==p[len-1-n])  return isPalindrome(n+1);
      else return false;  //递归结束的条件之2:字符串的字符一一对比过程中,出现字符不等的情况,故该字串不是回文。

     }          //注:满足任何一个递归结束条件,则结束递归了。这时候系统就着手于一层一层向上返回数据。


4.结果截图:

 

 

posted @ 2017-10-13 23:00  暖阳mm  阅读(228)  评论(0编辑  收藏  举报