• 课后作业杨辉三角形与组合数公式、递归编程解决汉诺塔问题。用Java实现、使用递归方式判断某个字串是否是回文


    一、杨辉三角形与组合数公式

    1.使用组合数公式n!来实现

    (1)利用组合数公式计算,通过对n的阶乘进行递归,实现求n!。

    (2)程序流程图

                        

                    

                         

                  

    (3)源程序代码

    import java.util.Scanner;

    public class Yhunsanjiao
    {

    public static void main(String[] args)
    {
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入一个数作为n:");
    int n=sc.nextInt();
    System.out.print("请输入一个数作为k:");
    int k=sc.nextInt();
    System.out.print("在n个元素中选取k个组合的所有结果数:"+zuheshu(k,n));
    }
    public static long zuheshu(int k,int n){
    long i;
    i=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));
    return i;
    }
    public static long jiecheng(int i){
    long j=1;
    if(i!=1)
    j=i*jiecheng(i-1);
    else
    i=1;
    return j;
    }
    }

    (4)程序截图

     

    2.使用递推方法用杨辉三角形计算组合数

    (1)解题思想:

    杨辉三角可以反映组合数的值,例如杨辉三角中第六排三列为10,即对应组合数c(5,2);通过递归建立杨辉三角,

    再通过杨辉三角输出组合数值。

    (2)程序流程图

                        

                 

                           

                       

    (3)源程序代码

    import java.util.Scanner;

    public class YHSJ {

    public static void main(String[] args)
    {
    // TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入一个数作为n:");
    int n=sc.nextInt();
    System.out.print("请输入一个数作为k:");
    int k=sc.nextInt();
    System.out.print("在n个元素中选取k个组合的所有结果数:"+ditui(k,n));
    }

    public static int ditui(int n,int m)
    {
    int a[][]=new int[m+1][m+1];
    for(int i=0;i<m+1;i++)
    {
    for(int j=i+1;j<m+1;j++)
    {
    a[i][j]=0;
    }
    for(int j=0;j<=i;j++)
    {
    if(j==0){ a[i][j]=1;}
    else
    {
    a[i][j]=a[i-1][j-1]+a[i-1][j];
    }
    }
    }
    return a[m][n];
    }
    }

    (4)截图

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

    (1)解题思想:通过对组合数递推公式的递归实现,输出组合数的值

    (2)程序流程图:

    (3)源程序代码

    import java.util.Scanner;

    public class YH {

    public static void main(String[] args)
    {
    // TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);
    System.out.print("请输入一个数作为n:");
    int n=sc.nextInt();
    System.out.print("请输入一个数作为k:");
    int k=sc.nextInt();
    System.out.print("在n个元素中选取k个组合的所有结果数:"+digui(k,n));
    }
    public static int digui(int n,int m)
    {
    if(n>m||n<0||m<0){return 0;}
    if(n==1){return m;}
    if(n==m){return 1;}
    return digui(n-1,m-1)+digui(n,m-1);
    }

    }

    (4)截图

    二、递归编程解决汉诺塔问题,用Java实现

    1.解决思想:

    无论有多少个盘子,始终都有n个盘子从peg1移动到peg3,有n-1个盘子从peg3移动到peg2,也有n-1个盘子从peg1到peg2,

    由此进行递归运算,解决问题。

    2.程序流程图:

     

    (3)源程序代码

    import java.util.Scanner;
    public class HANNUOTA
    {
    public static void moveDish(int level, char from, char inter, char to)
    {
    if (level == 1) {
    System.out.println("从" + from + " 移动盘子" + level + " 号到" + to);
    } else {
    moveDish(level - 1, from, to, inter);
    System.out.println("从" + from + " 移动盘子" + level + " 号到" + to);
    moveDish(level - 1, inter, from, to);
    }
    }
    public static void main(String[] args)
    {
    System.out.print("请输入盘子个数:");
    Scanner sc = new Scanner(System.in);
    int nDisks=sc.nextInt();
    moveDish(nDisks, 'A', 'B', 'C');
    }
    }

    (4)实验截图

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

    1.解题思路:先从键盘输入一个字符串,再利用String.charAT()函数得到字符串的各个位上的字符,进行比较,判断是否是回文字符串。

    2.程序流程图:

    (3)源程序代码:

    import java.util.*;
    public class HWZF
    {
    public static void main(String[] args)
    {
    Scanner s = new Scanner(System.in);
    String str = null;
    System.out.println("请输入您想输入的字符串:");
    str = s.next();
    System.out.println("您输入的是:");
    System.out.println(str);
    System.out.println("Is "+str+" a Palindrome?"+isPalindrome(str));

    }
    public static boolean isPalindrome(String s){
    if(s.length()<=1){
    return true;
    }else if(s.charAt(0) != s.charAt(s.length()-1)){
    return false;
    }
    return isPalindrome(s.substring(1,s.length()-1));
    }

    }

    (4)结果截图:

        

  • 相关阅读:
    C#自定义控件之数字文本框
    C# 校验字符串是否为IP格式
    C# winform 解决加载闪烁,背景透明等问题
    SQL Server 数据类型
    C#自定义控件之下拉列表框
    C#将 byte[ ] 转换为对应的struct
    AFNetworking图片上传
    xfs删除oracle数据文件恢复
    揭秘String类型背后的故事——带你领略汇编语言魅力
    [批处理]截取for命令里面的变量%%i
  • 原文地址:https://www.cnblogs.com/2016excellent-3584/p/7664300.html
Copyright © 2020-2023  润新知