• 2.方法课后作业


    一.计算组合数

    1.利用n!计算

    设计思想:可以把问题简化为求n的阶乘,然后再利用公式求解

    程序流程图:

    源代码

    import java.util.Scanner;
    public class zuhe {

    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    System.out.println("请输入组合数的参数n,k");
    Scanner in1=new Scanner(System.in);
    int n=in1.nextInt();
    Scanner in2=new Scanner(System.in);
    int k=in2.nextInt();
    in1.close();
    in2.close();
    int sum=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));
    System.out.println("C("+n+","+k+")="+sum);

    }
    public static int jiecheng(int p)
    {
    if(p<=1)
    {
    return 1;
    }
    else
    return p*jiecheng(p-1);
    }
    }

    程序截图:

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

    设计思想:

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

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

    程序流程图

    源代码

    import java.util.Scanner;
    public class zuhe2 {

    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    System.out.println("请输入组合数的参数n,k");
    Scanner in1=new Scanner(System.in);
    int n=in1.nextInt();
    Scanner in2=new Scanner(System.in);
    int k=in2.nextInt();
    in1.close();
    in2.close();
    System.out.println("C("+n+","+k+")="+jiecheng(n,k));
    }
    public static int jiecheng(int a,int b)
    {
    if(a<0||b<0||a<b)
    return 0;
    if(a==b)
    return 1;
    if(b==1)
    return a;
    return jiecheng(a-1,b)+jiecheng(a-1,b-1);

    }
    }

    程序截图

    三、使用递归的方法用组合数递推公式计算

    1.设计思想:通过对组合数递推公式的递归实现,输出组合数的值

    2.程序流程图:

    3.源程序代码:

    public class Zuheshu_2 {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in=new Scanner(System.in);
    System.out.println("m 应大于n");
    System.out.println("格式为c(m,n)");
    System.out.println("m:");
    int m=in.nextInt();
    System.out.println("n:");
    int n=in.nextInt();
    System.out.println("c"+"("+m+","+n+")"+"="+digui(n,m));
    }
    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);
    }
    }

    程序截图

    二.汉诺塔问题

    设计思想:

    假定要把n个盘子按题目规定由a杆借助b杆移动到c杆。模拟这一过程的算法称为hanio(n,a,b,c)。则有:第一步:先把上面的n-1个盘子设法借助b杆放到c杆,记做hanio(n,a,c,b); 第二步:把第n个盘子从a杆直接移到b杆第三步:把c杆上的n-1个盘子借助a杆移到b杆,记做hanio(n,c,a,b)。

    程序流程图:

    源代码:

    import java.util.Scanner;
    public class hanio {

    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    Scanner in=new Scanner(System.in);
    int i = in.nextInt();
    char a ='A',b='B',c='C';
    hanio(i,a,b,c);
    }
    public static void hanio(int n,char a,char b,char c){
    if(n==1)
    System.out.println("移动"+n+"号盘子从"+a+"到"+c);
    else{
    hanio(n-1,a,c,b);//把上面n-1个盘子从a借助b搬到c
    System.out.println("移动"+n+"号盘子从"+a+"到"+c);//紧接着直接把n搬动c
    hanio(n-1,b,a,c);//再把b上的n-1个盘子借助a搬到c
    }
    }
    }

    程序截图:

    三.回文字符串

    设计思想:若字符串长度<=1,则一定为回文字符串。利用函数判断首尾字符是否相等,若相同,则截去首尾返回到函数,直到字符串位数<=1

    程序流程图:

    源代码:

    import java.util.Scanner;
    public class huiwen {

    public static void main(String[] args) {
    // TODO 自动生成的方法存根
    System.out.println("请输入一个字符串:");
    Scanner in=new Scanner(System.in);
    String str=in.nextLine();
    if(huiwen(str)==1)
    {
    System.out.println(str+"是回文字符串");
    }
    else
    System.out.println(str+"不是回文字符串");
    in.close();
    }
    public static int huiwen(String s)
    {
    int length=s.length();
    if(length==0||length==1)
    {
    return 1;
    }
    char head=s.charAt(0);
    char tail=s.charAt(length-1);
    if(head!=tail)
    {
    return 0;
    }
    return huiwen(s.substring(1,length-1));
    }

    }

    程序截图

     

  • 相关阅读:
    [moka同学笔记]一、Yii2.0课程笔记(魏曦老师教程)
    [moka同学笔记]yii2.0导航栏
    [moka同学笔记]Yii2.0 dropDownList的使用(二)
    [moka同学笔记]Yii2.0验证码
    [moka同学摘录]Yii2 csv数据导出扩展
    [moka同学笔记]PHPexcel之excel导出和导入
    [moka同学代码]PHP初级知识:上传文件源码
    [moka同学摘录]在Centos 6.5下成功安装和配置了vim7.4
    [moka同学摘录]iptables防火墙规则的添加、删除、修改、保存
    [moka同学笔记]linux服务器防火墙的设置
  • 原文地址:https://www.cnblogs.com/lxy10375/p/7660249.html
Copyright © 2020-2023  润新知