zoukankan      html  css  js  c++  java
  • 课后作业02

    Java实现汉诺塔:

    程序设计思想:

    1.首先输入盘子的数量n,如果盘子的数量是1,则直接将编号为1的圆盘从A移到C,递归结束。

    2.否则:

    递归,将A上编号为1n-1的圆盘移到B,C做辅助塔;

    直接将编号为n的圆盘从AC;

    递归,将B上的编号为1n-1的圆盘移到C,A做辅助塔。

    程序流程图:

     

    程序源代码:

    package tourial2;

    import java.util.Scanner;

    public class Hanio {

    public static int m=0;

    public static void move (String A,int n,String C)

    {

    System.out.println(++m+": "+n+","+A+"->"+C);

    }

    public static void Hanio (int n,String A,String B,String C)

    {

    if(n==1)

    move(A,1,C);

    else

    {

    Hanio(n-1,A,C,B);

    move(A,n,C);

    Hanio(n-1,B,A,C);

    }

    }

    public static void main(String[] args) {

    // TODO 自动生成的方法存根

    String A ,B ,C ;

    Scanner input=new Scanner(System.in);

    System.out.println("请输入三个盘子的名称:");

    A=input.next();

    B=input.next();

    C=input.next();

    System.out.println("请输入盘子的个数:");

    int n=input.nextInt();

    Hanio(n,A,B,C);

    }

    }

    程序截图:

     

     

    问题二:随意输入一个任意大小的字符串,判断他是不是回文字符串。

    程序设计思想:

    从键盘随意输入一个字符串,并将其赋值给一个数组,然后用递归进行,若i=j,泽肯定是递归,否则从数组的首元素与尾元素进行比较,若相等,则进行i++j--,不断向中间靠拢,直到达到判断条件i>=j(i=j是输入的字符串的长度为偶数个,i>j是输入的字符串有奇数个),中间若有一次不符合判断,直接跳出递归,结束进程,输出不是回文字符串。(i是指的字符串的第一个元素的下标,j是指的字符串的最后一个元素的下标)

    程序设计流程图:

     

    程序源代码:

    package tourial2;

    import java.util.Scanner;

    public class huiwenshu {

    public static void huiwen(char a[],int j,int i)

    {

    if(i>=j)

    {

    if(a[i]==a[j])

    System.out.println("是回文");

    System.exit(0);

    }

    if(a[i] == a[j])

    huiwen(a,--j,++i);

    else 

    {

    System.out.println("他不是回文数!");

    System.exit(0);

    }

    }

    public static void main(String[] args)

    {

    String s;

    int j;

    int i=0;

    Scanner input=new Scanner(System.in);

    System.out.println("请输入 一个字符串:");

    s=input.next();

    char a[];

    a=s.toCharArray();

    j=a.length-1;

    for( int k=0;k<s.length();k++)

    {

    System.out.print (a[k]);

    }

    huiwen(a,j,i);

    }

    程序截图:

     

     

    根据杨辉三角递推求组合数

    程序设计思想:

    根据杨辉三角的规律,得出杨辉三角的第n行的第m个的值等于该位置的元素的上一行的左右两个输的和,然后根据杨辉三角与组合数的关系即c(n,m)等于杨辉三角的第n+1的第m+1个元素的值,根据这个来写出组合数的值。

    程序流程图:

     

    程序源代码:

     package tourial2;

    import java.util.Scanner;

    public class yanghuisanjiao

    {

          public static void yanghuisanjiao(int n,int m)

      {

    if(m==1)

    {

    System.out.println("输出结果为:");

    System.out.println(n);

    }

    else

    {

    n=n+1;

    int a[][] = new int [n][n];

    System.out.println(1);

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

    a[i][0]=1;

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

    {

    System.out.print(1+" ");

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

    {

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

            System.out.print(" "+a[i][j]);

    }

    System.out.println();

        }

    System.out.println();

    System.out.println("输出结果:");

    System.out.println(a[n-1][m]);

        }

    }

    public static void main(String[] args) {

    int x,y;

    Scanner input=new Scanner(System.in);

    System.out.println("请输入第一个数:");

            x=input.nextInt();

    System.out.println("请输入第二个数:");

            y=input.nextInt();

            while(x>y)

            {

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

             System.out.println("请输入第一个数:");

                x=input.nextInt();

         System.out.println("请输入第二个数:");

                y=input.nextInt();

            

            }

            yanghuisanjiao(y,x);

    }

    }

    程序截图:

     

    利用阶乘公式来计算组合式:

    程序设计思想:

    根据公式

    来计算组合数的大小,从键盘输入n,m的值,设计一个计算阶乘的大小,如果输入的数a10,则直接return 1,否则运用递归,计算a-1的阶乘,直到a1时,递归结束。

    程序流程图:

                                                                                                                 

    阶乘的流程图:

                                                                                                   

    程序的源代码:

    package tourial2;

    import java.math.BigInteger;

    import java.util.Scanner;

    public class zuheshu {

    public static BigInteger calculateN2(int n) {

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

    return BigInteger.valueOf(1);

    }

    return BigInteger.valueOf(n).multiply(calculateN2((n-1)));

    }

    public static void main(String[] args) {

    Scanner scanner=new Scanner(System.in);

    System.out.print("请输入N1");

    int number1=scanner.nextInt();

    BigInteger f1=calculateN2(number1);

    //System.out.println(number1+"!="+calculateN2(number1));

    System.out.print("请输入N2");

    int number2=scanner.nextInt();

    BigInteger f2=calculateN2(number2);

    BigInteger f3=calculateN2(number1-number2);

    //System.out.println(number2+"!="+calculateN2(number2));

    BigInteger f4=f2.multiply(f3);

    BigInteger f5= f1.divide(f4);

    System.out.println("组合输的结果是:"+f5);

    }

    }

    程序截图:

                                                                                 

    运用公式计算组合数:

    程序设计思想:

    输入n,m,两个数(来组成要求出的组合数)(n>m),如果m=1,则输出结果n,如果m!=1,则进入递归,运用公式,直到进行到n-m=1的时候,结束递归,输出结果。

    程序流程图:

                                                                                       

    程序源代码:

    package tourial2;

    import java.util.Scanner;

    public class gongshi {

    public static int yang(int n,int m)

       {

    int b;

    if(m!=1)

      {

        while(n-m==1)

        {

      return n;

        }

    b=yang(n-1,m-1)+yang(n-1,m);

      }

    else 

    b=n;

    return b;

       }

    public static void main(String[] args) {

    int n,m;

    Scanner input=new Scanner(System.in);

    System.out.println("请输入两个数:");

    n=input.nextInt();

    m=input.nextInt();

    System.out.println("输出结果:"+yang(n,m));

    }

    }

    程序截图:

                                                                                                            

  • 相关阅读:
    信息搜集与漏洞扫描
    ASN.1分析Alipay证书
    任务计划
    2020系统综合实践 期末大作业 21组
    2020系统综合实践 第6次实践作业 2组
    第5次实践作业
    第4次实践作业
    第3次实践作业
    第2次实践作业
    第1次实践作业
  • 原文地址:https://www.cnblogs.com/ljysy/p/7660591.html
Copyright © 2011-2022 走看看