zoukankan      html  css  js  c++  java
  • 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));
    }

    }

    程序截图

     

  • 相关阅读:
    POJ1239
    HDU 2829 四边形不等式优化
    返回数字二进制的最高位位数o(n)
    矩阵快速幂 模板
    HDU4718 The LCIS on the Tree(LCT)
    HDU4010 Query on The Trees(LCT)
    HDU3487 Play With Chains(Splay)
    CF444C DZY Loves Colors
    HDU4836 The Query on the Tree(树状数组&&LCA)
    HDU4831&&4832&&4834
  • 原文地址:https://www.cnblogs.com/lxy10375/p/7660249.html
Copyright © 2011-2022 走看看