• 课后作业2


    (1)

    解题思路:

     公式已经给出,利用递归的方法求阶乘,n为0和1时候为一,其他时候调用阶乘函数,利用递归方法求阶乘,然后按照公式计算结果。

    流程图:

    程序代码:

    import java.util.Scanner;

    public class zuheshu {
    public static void main(String[] args){
    System.out.println("请输入组合数的n和k");
    @SuppressWarnings("resource")
    Scanner cin=new Scanner(System.in);
    int n,k;
    n=cin.nextInt();
    k=cin.nextInt();
    while(k>n)
    {
    System.out.println("输入错误,请重新输入");
    n=cin.nextInt();
    k=cin.nextInt();
    }
    long j=calculateN(n)/(calculateN(k)*calculateN(n-k));//公式
    System.out.println("组合数为"+j);
    }
    public static long calculateN(int n) {
    if(n==1 || n==0){
    return 1;
    }

    return n*calculateN(n-1);
    }
    }

    截图:

    (2)思路:

    设置一个初始都为0的数组把数组的1 1 2 1 2 2都赋值为1,剩余按照公式的计算,然后按照数组的行和列来输出组合数。

    流程图:

    代码:

    import java.util.Scanner;
    public class yanghuisanjiao {
    public static void main(String arg[]){
    int a[][]=new int[100][100];
    int i,j,n,k;
    for(i=0;i<100;i++)
    for(j=0;j<100;j++)
    {
    a[i][j]=0;
    }//初始化
    a[1][1]=1;
    a[2][1]=1;
    a[2][2]=1;//把前三个先赋值,便于后面的计算
    for(i=3;i<100;i++)
    for(j=1;j<100;j++)
    {
    a[i][j]=a[i-1][j-1]+a[i-1][j];//正常的按照数字来在数组中赋值就可以,以为0列都是0,后面的也是0
    }
    System.out.print("请输入组合数的n和k(即杨辉三角的行和列)");
    Scanner cin=new Scanner(System.in);
    n=cin.nextInt();
    k=cin.nextInt();
    while(k>n)//防止出错
    {
    System.out.println("输入错误,请重新输入");
    n=cin.nextInt();
    k=cin.nextInt();
    }
    System.out.println("组合数为"+a[n][k]);
    }
    }

    截图:

    (3)

    思路:利用递归的思想和题目中给的公式,递归方法中,当行列为1 1时候返回1,行和列相等时候返回1,其余利用递归方法求。

    流程图:

    代码:

    import java.util.Scanner;
    public class yanghuisanjiao2 {
    public static void main(String arg[]){
    System.out.println("请输入组合数的n和k");
    @SuppressWarnings("resource")
    Scanner cin=new Scanner(System.in);
    int u=1;
    while(u==1)
    {
    int n,k;
    n=cin.nextInt();
    k=cin.nextInt();
    int m=yanghuisanjiao(n,k);
    while(k>n)//防止输出错误
    {
    System.out.println("输入错误,请重新输入");
    n=cin.nextInt();
    k=cin.nextInt();
    }
    System.out.println("杨辉三角数为"+m);}
    }

    private static int yanghuisanjiao(int n, int k) {
    // TODO 自动生成的方法存根
    if((n==1 || k==1)){
    return 1;
    }
    else if(n==k) return 1;//这句很重要
    //else if(n>k) return 0;这句打上去就不对,233.很无奈.
    else return yanghuisanjiao(n-1,k-1)+yanghuisanjiao(n-1,k);}//递归方法

    }

    截图:

    思路:

    利用递归的方法,每次移动给一个盘子,而且大盘子必须在小盘子下面,三根柱子一根作为辅助 ,把盘子从一个一定到另一个柱子,所以利用递归求移动的次数,并且创建一个move函数显示移动轨迹。

    流程图:

    代码:

    import java.util.Scanner;
    public class hannuota {
    public static void main(String arg[]){
    System.out.println("请输入盘子的数量");
    char A='A',B='B',C='C';//定义三根柱子
    @SuppressWarnings("resource")
    Scanner cin=new Scanner(System.in);
    int m=cin.nextInt();
    fangfa(m,A,B,C);
    }

    private static void fangfa(int m, char a, char b, char c)//b做辅助,把m个盘子从a移动到c
    {
    // TODO 自动生成的方法存根
    if(m==1) move(1,a,c);
    else
    {
    fangfa(m-1,a,c,b);

    move(m,a,c);

    fangfa(m-1,b,a,c);//递归方法移动盘子
    }
    }

    private static void move(int i, char a, char c)//输出盘子移动的函数
    {
    // TODO 自动生成的方法存根
    System.out.println("第"+i+"个圆盘从"+a+"移动到"+c);
    }

    }

    截图:

    思路:

    定义一个string类型的数据,从键盘输入然后用递归的方法 依次比较字符串的第一个字符与最后一个是否相等。

    流程图: 

     

    代码:

    import java.util.Scanner;
    public class huiwenshu {
    public static void main(String agr[]){

    Scanner cin=new Scanner(System.in);
    System.out.println("请输入字符");
    String j=cin.next();
    int m,n;
    m=0;//字符串的第一个字符
    n=j.length()-1;//字符串的最后一个字符
    palindrome(j,m,n);//判断回文数的函数
    }
    private static void palindrome(String j, int m, int n) {
    // TODO 自动生成的方法存根
    if(m==n) System.out.println("是回文数");
    else if(m==n-1) System.out.println("是回文数");
    else if (j.charAt(m)==j.charAt(n))//判断两个字符是否相等
    {palindrome(j,m+1,n-1);}
    else System.out.println("不是回文数");
    }

    }

    截图:

    心得体会:

    这几个都是用调用的递归方法的函数来实现程序的,让我对java

    的递归方法有了更全面的了解,但是有的递归的最先条件非常不好判断,还学会了string 的字符比较方法。

    https://necydcy.me/
  • 相关阅读:
    Discuz!NT代码阅读笔记(4)一切皆可配置:页面的显示
    WAP网站开发

    Discuz!NT代码阅读笔记(2)网站安装自动化论坛程序安装及初始化过程
    Discuz!NT代码阅读笔记(1)从HttpModule开始
    c#使用Transactions类完成多个数据库的事务操作(分布式事务处理)
    自我介绍 简历
    Discuz!NT 系统架构分析
    缓存应用Memcached分布式缓存简介(二)
    数组类型EDT的元素个数
  • 原文地址:https://www.cnblogs.com/miria-486/p/7664632.html
Copyright © 2020-2023  润新知