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("该字符串不是回文字符串");
    }
    }
    }
    }

    结果截图:

     

  • 相关阅读:
    golang 常见疑惑总结
    golang 详解defer
    golang调试工具Delve
    ACE的源码划分
    通过#define连接字符串的特殊方法[转]
    转:extern "C"的用法解析
    转:3d max 2013 安装教程,凭着一种互联网精神提供给广大朋友
    转:Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)
    转:折腾一晚上Bullet及Ogre相关工具的成果 -- 3Ds Max,Maya, blender, GameKit
    转:CMake快速入门教程-实战
  • 原文地址:https://www.cnblogs.com/mqlblog/p/7660897.html
Copyright © 2011-2022 走看看