zoukankan      html  css  js  c++  java
  • JAVA第二章课后作业

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

    设计思想:利用递归法求阶乘,利用公式即可求得组合数的计算结果

    import java.util.*;

    public class CombinationNumber {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    System.out.print("请输入组合数下标n:");
    int n = in.nextInt();
    System.out.print("请输入组合数上标k:");
    int k = in.nextInt();
    int C = Jiecheng(n)/(Jiecheng(k)*Jiecheng(n - k));
    System.out.println("C(n,k) = "+C);
    }
    public static int Jiecheng(int n)//递归法计算阶乘
    {
    int s = 0;
    if(n < 0)
    System.out.println("Error!");
    else if(n == 1||n == 0)
    s = 1;
    else
    s = n * Jiecheng(n -1);
    return s;
    }
    }

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

    设计思想:利用for循环逐步求得组合数结果。

    import java.util.Scanner;

    public class Combination2 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    System.out.print("请输入组合数下标n:");
    int n = in.nextInt();
    System.out.print("请输入组合数上标k:");
    int k = in.nextInt();

    int C = CombinationNumber(n,k);
    System.out.println("C(n,k) = "+C);
    }
    public static int CombinationNumber(int n,int k)
    {
    if(k == 0||n == k) return 1;
    int s=Math.min(k,n-k);
    int p = 1,q = 0;

    for(int i = 1; i <= s; i++)//递推计算
    {
    q = p * (n-i+1)/(i);
    p = q;
    }

    return q;
    }
    }

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

    设计思想:利用递推公式,递归方式求得;注意结束条件。

    import java.util.Scanner;

    public class Combination3 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    System.out.print("请输入组合数下标n:");
    int n = in.nextInt();
    System.out.print("请输入组合数上标k:");
    int k = in.nextInt();

    int C = CombinationNumber(n,k);
    System.out.println("C(n,k) = "+C);
    }
    public static int CombinationNumber(int n,int k)//递归法计算组合数
    {
    int c = 0;
    if(n == 1||k == 0||n == k)
    c = 1;
    else
    c = CombinationNumber(n - 1,k - 1) + CombinationNumber(n - 1,k);
    return c;
    }
    }

    2.递归编程解决汉诺塔问题

    设计思想:当A塔上有n个盘子时,先将A塔上编号 1 至 n-1 的盘子移动到B塔上(借助C塔),然后将A塔上n号盘子移动到C塔上,最后将B塔上的n-1个盘子借助A塔移动到C塔上。即用递归实现,结束条件是 n=1 时只需直接移动;遇到的问题:如何递归实现。

    import java.util.*;
    public class TowersOfHanoi2 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    System.out.print("请输入盘子个数:");//盘子从上至下编号从1到n
    int p = in.nextInt();
    char ch1 = 'A';
    char ch2 = 'B';
    char ch3 = 'C';
    Hanoi(p,ch1,ch2,ch3);//最终实现1到n个盘子从A柱移到C柱
    }
    public static void move(int n,char from,char to)
    {
    System.out.printf( "将%d号盘子%c --> %c ",n,from,to);
    }
    public static void Hanoi(int n,char from,char mid,char to)
    {
    if(n == 1)
    move(1,from,to);//结束条件,当n = 1时移动一次即可
    else
    {Hanoi(n-1,from,to,mid);//将n-1个盘子从A移到B
    move(n,from,to);//将n个盘子移到C
    Hanoi(n-1,mid,from,to);//将n-1个盘子从B移到C
    }
    }
    }

    3.使用递归方式判断某个字串是否是回文

    设计思想:将输入的字符串转化为数组形式储存才能方便比较(利用 toCharArray() 函数)

    import java.util.*;
    public class Palindrome {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    String temp = "";
    char[] a;
    Scanner in = new Scanner(System.in);
    System.out.print("请输入要判断的字符串:");
    String str = in.next();
    a = str.toCharArray();//将字符串对象中的字符转换为一个字符数组
    for(int i = a.length - 1;i >= 0;i--)//将字符串逆置
    {
    temp += a[i];
    }
    if(str.equals(temp))
    System.out.println(str+"是回文数!");
    else
    System.out.println(str+"不是回文数!");
    }
    }

     

  • 相关阅读:
    python爬虫
    RMQ算法
    组合数
    水池数目
    jQuery 拼接事件
    ORACLE
    day 75
    day74 vue框架
    day73 vue框架
    day 72 vue框架
  • 原文地址:https://www.cnblogs.com/as1165/p/7661951.html
Copyright © 2011-2022 走看看