zoukankan      html  css  js  c++  java
  • Java02-方法 课后作业

    一、组合数

    1.设计思想

    首先定义两个变量n和k,采用三种方法计算组合数

    第一种,利用组合数公式计算,这种方法主要就是定义一个求阶乘的方法,利用递归可以求得阶乘

    第二种,利用递归的方法使用组合数递推公式,递归调用函数,从后往前推导

    第三种,利用杨辉三角的原理,设置二维数组,从上到下依次保存杨辉三角所得数,根据输入的nk值,找出对应的值

    2.流程图

    (1)

    (2)

    (3)

    3.源代码

    package test;
    import java.util.Scanner;
    import java.math.BigInteger;
    public class Classtest1
    {
    public static BigInteger zuheshu(int k,int n)
    {
    BigInteger i;
    i=jiecheng(n).divide((jiecheng(k).multiply(jiecheng(n-k))));
    return i;
    }
    public static BigInteger jiecheng(int i)
    {
    if(i==1 || i==0){
    return BigInteger.valueOf(1);
    }
    return BigInteger.valueOf(i).multiply(jiecheng((i-1)));
    }
    public static BigInteger cal(int k,int n)
    {
    if(n==k||k==0)
    return BigInteger.valueOf(1);
    else if(k==1)
    return BigInteger.valueOf(n);
    else
    return cal(k,n-1).add(cal(k-1,n-1));
    }
    public static int Ditui(int i,int j)
    {
    int a[][]=new int[100][100];
    a[0][0]=1;
    int result=1;
    for(int p=1;p<100;p++)
    for(int q=0;q<=p;q++)
    {
    if(q==0||p==q)
    {
    a[p][q]=1;
    }
    else
    a[p][q]=a[p-1][q-1]+a[p-1][q];
    if(p==i&&q==j)
    {
    result=a[p][q];
    break;
    }

    }

    return result;
    }
    public static void main(String[] args)
    {
    int n,k;
    Scanner input=new Scanner(System.in);
    System.out.println("请输入一个正整数作为n值:");
    n=input.nextInt();
    System.out.println("请输入一个正整数作为k值:");
    k=input.nextInt();
    System.out.println("使用组合数公式计算出的组合数个数为:"+zuheshu(k,n));
    System.out.println("使用递归的方法计算出的组合数个数为:"+cal(k,n));
    System.out.println("使用杨辉三角计算出的组合数个数为:"+Ditui(n,k));
    }
    }

    4.截图

    二、汉诺塔

    1.设计思想

    三个柱子:1.原柱子2.中间柱(辅助)3.目标柱

    首先把1柱上"共"n-1个通过3移到2(递归),如果只剩一个:把1柱上"第"n个直接移动到3柱,把2柱上"共"n-1个通过1移到3(递归)

    2.流程图

    3.源代码

    package test;
    import java.util.Scanner;
    public class Classtest2
    {
    public void Hnt(int a,char one,char two,char three)
    {
    if(a==1)
    move(one,three);
    else
    {
    Hnt(a-1,one,three,two);
    move(one,three);
    Hnt(a-1,two,one,three);
    }
    }
    public void move(char x,char y)
    {
    System.out.println("从"+x+"移动到"+y);
    }
    public static void main(String[] args)
    {
    Classtest2 h=new Classtest2();
    Scanner input=new Scanner(System.in);
    System.out.print("请输入初始盘子数量:");
    int num=input.nextInt();
    h.Hnt(num,'1','2','3');

    }

    }

    4.截图

    三、回文

    1.设计思想

    输入一个字符串,将字符串最大长度赋给一个变量,判断字符串长度,如果为0或1,则输出是回文数,如果不是,则调用递归,从字符串头尾字符开始分别判断是否相等。

    2.流程图

    3.源代码

    package test;
    import java.util.Scanner;
    public class Classtest3
    {
    public int judge(String str,int length,int star,int stop)
    {
    if(length==0||length==1)
    {
    return 1;
    }
    if(str.charAt(star)!=str.charAt(stop))
    {
    return 0;
    }
    else
    {
    return judge(str,length-2,star+1,stop-1);
    }
    }

    public static void main(String[] args)
    {
    Scanner input=new Scanner(System.in);
    System.out.println("输入一个字符串:");
    String str;
    str=input.nextLine();
    int l=str.length();
    Classtest3 hw=new Classtest3 ();
    if(hw.judge(str, l, 0, l-1)==1)
    {
    System.out.println("是回文字符串");
    }
    else
    System.out.println("不是回文字符串");

    }

    }

    4.截图

     

  • 相关阅读:
    菜鸟小试牛刀。。
    RDBMS中部分关于可用性的特性
    ORA01403:no data found exception的解决小道
    oracle的存储结构(一)
    过度使用DBLINK带来的问题
    如何远程指定查询分区表的某个分区
    oracle显式游标不关闭、不关闭就再次打开会不会报错?
    Http方式下载Servlet实现
    Javazip压缩文件乱码问题
    mysql “Access denied for user 'root'@'localhost'
  • 原文地址:https://www.cnblogs.com/sakura--/p/7663026.html
Copyright © 2011-2022 走看看