• Java第二次课程作业


    一.使用计算机计算组合数

    1.使用组合数公式利用n!来计算

    (1)设计思想

     首先定义阶乘函数的算法,在计算组合数的公式中调用阶乘函数

    (2)程序流程图

    (3)源代码

    package jiecheng;
    import java.util.Scanner;
    public class jiecheng
    {
    public static int jiecheng0(int j)//计算j的阶乘,结果为k
    {
    int k=1;
    Scanner input=new Scanner(System.in);
    j=input.nextInt();
    for(int i=1;i<=j;i++)//利用循环结构计算阶乘
    {
    k=k*i;
    }
    return k;
    }
    public static void main(String[] args)
    {
    Scanner input1=new Scanner(System.in);
    System.out.println("请输入组合数的上标");
    int k=input1.nextInt();
    System.out.println("请输入组合数的下标");
    int n=input1.nextInt();
    if(k>n)
    {
    System.out.println("输入有误");
    }
    else//计算组合数
    {
    int m;
    m=jiecheng0(n)/(jiecheng0(k)*jiecheng0(n-k));
    System.out.println("组合数值为"+m);
    }
    }
    }

    (4)结果截图

    2.使用递推的方法用杨辉三角形计算

    (1)设计思想

    先构建杨辉三角,再利用杨辉三角计算组合数

    (2)程序流程图

     

    (3)源代码

    package yanghui;
    import java.util.Scanner;
    public class yanghui
    {
    public static void main(String args[])
    {
    Scanner input=new Scanner(System.in);
    int n,k;//组合数公式中的n k
    System.out.println("请输入组合数公式的n和k:");
    n=input.nextInt();
    k=input.nextInt();
    int [][]f=new int[27][27];//构建杨辉三角
    f[0][0] = 1; 
    for(int i = 1;i <= 24;i++) 

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

      f[i][j] = f[i - 1][j - 1] + f[i - 1][j]; 
      } 

    System.out.println("组合结果为"+f[n+1][k+1]);//输出结果
    }
    }

    (4)结果截图

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

    (1)设计思路

    定义一个递归函数,反复调用得出组合数

    (2)程序流程图

    (3)源代码

    package digui;
    import java.util.Scanner;
    public class digui
    {
    public static void main(String args[])
    {
    Scanner input=new Scanner(System.in);
    int n,k;//组合数公式中的n k
    System.out.println("请输入组合数公式的n和k:");
    n=input.nextInt();
    k=input.nextInt();
    System.out.println("组合结果为"+ZuHe(n,k));
    }
    public static long ZuHe(int a,int b)//构造递归函数
    {
    if(b==0)
    return 1;
    else if(a==1)
    return 1;
    else if(a==b)
    return 1;
    else

    return (ZuHe(a-1,b-1)+ZuHe(a-1,b));
    }
    }

    (4)结果截图

    二.递归编程解决汉诺塔问题(用Java实现)

    (1)设计思路

    利用递归函数不断分解移动步骤,直到分解为求三个盘子的移动操作

    (2)程序流程图

     

    (3)源代码

    import java.util.Scanner;
    public class hannuota
    {
    public static void move(char x,char y)
    {
    System.out.printf("%c->%c", x,y);
    System.out.println();
    }
    public static void hannuota(int n,char one,char two,char three)
    {
    if(n==1)
    move(one, three);
    else
    {
    hannuota(n-1, one, three, two);
    move(one, three);
    hannuota(n-1, two, one, three);
    }
    }
    public static void main(String[] args)
    {
    Scanner input= new Scanner(System.in);
    System.out.println("请输入汉诺塔的个数:");
    int a =input.nextInt();
    System.out.println("移动步骤:");
    hannuota(a, 'x','y','z');
    }
    }

    (4)结果截图

    三.使用递归方式判断某个字串是否是回文( palindrome )

    (1)设计思路

    从字符数组的两端开始判断它是否符合回文的规则 

    (2)程序流程图

     

    (3)源代码

    package huiwenzifuchuan;
    import java.util.Scanner;
    public class huiwenzifuchuan
    {
    public static void main(String[] args)
    {
    System.out.println("请输入一个字符串:");
    Scanner scan = new Scanner(System.in);
    String temp;
    char[] arr;
    int i, j, len; //接收输入的字符串
    temp = scan.nextLine(); //将字符串temp中的全部字符存入字符数组arr中
    arr = temp.toCharArray();
    len = arr.length; //从字符数组的两端开始判断它是否符合回文的规则
    for(i=0,j=len-1; i<j; i++,j--)
    {
    if(arr[i] != arr[j])
    {
    break;
    }
    } //根据判断是否全部完成来决定它是否是回文串
    if(i >= j)
    {
    System.out.println(temp + " 是回文字符串");
    }
    else
    {
    System.out.println(temp + " 不是回文字符串");
    }
    }
    }

    (4)结果截图

  • 相关阅读:
    团队项目-选题报告
    1
    第二次结对编程作业
    第2组 团队展示
    第02组 Alpha冲刺(4/6)
    第02组 Alpha冲刺(3/6)
    第02组 Alpha冲刺(2/6)
    第02组 Alpha冲刺(1/6)
    第02组 团队GIT现场编程实战
    团队项目-需求分析报告
  • 原文地址:https://www.cnblogs.com/xqyfight/p/7664373.html
Copyright © 2020-2023  润新知