zoukankan      html  css  js  c++  java
  • 课堂作业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.结果截图:

     

  • 相关阅读:
    小工具之文件整合
    [JavaWeb基础] 031.dom4j写入xml的方法
    AES128_CBC模式加密
    eatwhatApp开发实战(九)
    [Objective-C] 021 KVC、KVO
    eatwhatApp开发实战(八)
    eatwhatApp开发实战(七)
    [Objective-C] 020_ Block
    eatwhatApp开发实战(六)
    年终总结--我的2019
  • 原文地址:https://www.cnblogs.com/gcc1828129658/p/7658340.html
Copyright © 2011-2022 走看看