zoukankan      html  css  js  c++  java
  • Java上机实验二

    课后作业1:(1)使用组合数公式利用n!来计算

    设计思想:设计一个方法,用来计算n的阶乘,方法参数为一个long类型变量。用递归方法实现计算阶乘计算,当传入参数为0或者1时为递归最后条件,不满足条件时进行递归调用,直到符合。然后在主函数将组合数公式表示出来进行计算。

    程序流程图:

    程序源代码:

    import java.util.Scanner;
    //(1)
    public class zuheshu {

    static public long jiecheng(long n)
    {
    long m=0;
    if(n==0||n==1)
    {
    m=1;
    }
    else
    {
    m=n*jiecheng(n-1);
    }
    return m;
    }
    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Scanner input=new Scanner(System.in);
    long jieshu,dishu,p;
    System.out.println("请输入底数: ");
    dishu=input.nextLong();
    System.out.println("请输入阶数: ");
    jieshu=input.nextLong();
    p=jiecheng(dishu)/(jiecheng(jieshu)*jiecheng(dishu-jieshu));
    System.out.println("结果为: ");
    System.out.println(p);
    }

    }

    结果截图:

     

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

    设计思想:定义一个二维数组,用来表示底数和阶数,数组首元素定为1,定义循环体,表示出公式,一层层逐渐递推到数组的首元素,实现计算。

    程序流程图:

    程序源代码:

    import java.util.Scanner;
    //(2)
    public class yanghui {

    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Scanner input=new Scanner(System.in);
    long a[][]=new long[30][30];
    System.out.println("请输入底数: ");
    int n=input.nextInt();
    System.out.println("请输入阶数: ");
    int k=input.nextInt();
    a[0][0]=1;
    int i,j;
    for(i=1;i<30;i++)
    {
    for(j=1;j<=i;j++)
    {
    a[i][j]=a[i-1][j-1]+a[i-1][j];
    }
    }
    System.out.println("得到的结果为: ");
    System.out.println(a[n+1][k+1]);
    }
    }

    结果截图:

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

    设计思想:设计一个方法,当传入的底数或者阶数为1时为递归的最后条件,如果不满足则进行递归调用,两个参数逐渐降低,直到符合底数或者阶数为1的条件。

    程序流程图:

    程序源代码:

    import java.util.Scanner;
    //(3)

    public class jiecheng {

    static public long jiecheng(int n,int k)
    {

    if(n==1||k==1)
    {
    return 1;
    }
    else
    {
    return jiecheng(n-1,k-1)+jiecheng(n-1,k);
    }
    }
    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Scanner input=new Scanner(System.in);
    System.out.println("请输入底数: ");
    int n=input.nextInt();
    System.out.println("请输入阶数: ");
    int k=input.nextInt();
    long num=jiecheng(n,k);
    System.out.println("得到的结果为:");
    System.out.println(num);
    }
    }

    结果截图:

    课后作业2.递归编程解决汉诺塔问题

    设计思想:将n个盘子从A座移到C座可以分解为三步:

    (1)将A上n-1个盘子借助C座先移到B座

    (2)将A座上剩下的一个盘移到C座

    (3)将n-1个盘从B座借助A座移到C座上

    程序流程图:

    程序源代码:

    import java.util.Scanner;
    public class hannuota {
    public static void move(char x,char y)
    {
    System.out.println(x+"-->"+y);
    }
    static public void hanoi(int n,char one,char two,char three)
    {
    if(n==1)
    {
    move(one,three);
    }
    else
    {
    hanoi(n-1,one,three,two);
    move(one,three);
    hanoi(n-1,two,one,three);
    }

    }

    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Scanner input=new Scanner(System.in);
    System.out.println("请输入塔层数: ");
    int n=input.nextInt();
    hanoi(n,'A','B','C');
    }

    }

    结果截图:

    课后作业3.使用递归方式判断某个字串是否是回文。

    设计思想:首先输入一个字符串,运用函数判断字符串的位数,如果是单数则中间那个字符可以不进行判断,双数对称进行判断是否相等。在这个过程中需要将字符串转化为一个char类型的数组,用于比较。

    程序流程图:

    程序源代码:

    import java.util.Scanner;
    public class huiwen {

    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Scanner input=new Scanner(System.in);
    String num="abc";
    System.out.println("请输入字符串: ");
    num=input.next();
    int a=num.length();
    char[]b=num.toCharArray();//定义一个字符数组存放字符串每一位的字母
    int i,c,flag=0;
    c=a;
    if(c%2==0)
    {
    for(i=0;i<c/2;i++)
    {
    if(b[i]==b[a-1])
    {
    a=a-1;
    }
    else
    {
    flag=1;//旗帜变量为1表示不是回文数
    }
    }
    if(flag==0)
    {
    System.out.println("该字符串是回文字符串");
    }
    else
    {
    System.out.println("该字符串不是回文字符串");
    }
    }
    else
    {
    for(i=0;i<(c-1)/2;i++)
    {
    if(b[i]==b[a-1])
    {
    a=a-1;
    }
    else
    {
    flag=1;//旗帜变量为1表示不是回文数
    }
    }
    if(flag==0)
    {
    System.out.println("该字符串是回文字符串");
    }
    else
    {
    System.out.println("该字符串不是回文字符串");
    }
    }
    }
    }

    结果截图:

     

  • 相关阅读:
    ubuntu 安装 redis desktop manager
    ubuntu 升级内核
    Ubuntu 内核升级,导致无法正常启动
    spring mvc 上传文件,但是接收到文件后发现文件变大,且文件打不开(multipartfile)
    angular5 open modal
    POJ 1426 Find the Multiple(二维DP)
    POJ 3093 Margritas
    POJ 3260 The Fewest Coins
    POJ 1837 Balance(二维DP)
    POJ 1337 A Lazy Worker
  • 原文地址:https://www.cnblogs.com/mqlblog/p/7660897.html
Copyright © 2011-2022 走看看