zoukankan      html  css  js  c++  java
  • 课程作业02-汇总整理

    1.使用组合数公式利用n!计算

    设计思想:

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

    程序流程图:

    源程序代码:

    package zuheshu;

    import java.util.Scanner;

    public class Zuheshu

    {

           public static void main(String[] args) {

                  long k,n,s;

                  Scanner input=new Scanner(System.in);

                  System.out.println("请输入k和n的值:");

                  k=input.nextInt();

                  n=input.nextInt();

                  s=fun(n)/(fun(k)*fun((n-k)));

                  System.out.print("计算结果为:"+s);

           }

           public static long fun(long n)

        {

                  int sum=1;

                  for(int i=1;i<=n;i++)

                  {

                         sum=sum*i;

                  }

                  return sum;

           }

    }

    结果截图:

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

    设计思想:

    杨辉三角可以反映组合数的值,通过递归建立杨辉三角,再通过杨辉三角输出组合数的值。

    程序流程图:

    源程序代码:

    import java.util.Scanner;

    public class Zuheshu2

    {

           public static void main(String[] args)

           {

                  Scanner input=new Scanner(System.in);

                  System.out.println("请输入n和m的值");

                  int n=input.nextInt();

                  int m=input.nextInt();

                  if(m<n)

                  {

                         System.out.println("输入错误!");

                  }

                  else

                         System.out.println("C"+"["+n+","+m+"]"+"="+yanghui(n,m));

           }

           public static int yanghui(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];

           }

    }

     

    结果截图:

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

    设计思想:

    通过对组合数递推公式的递归实现,输出组合数的数值。

    程序流程图:

    源程序代码:

    import java.util.Scanner;

    public class Zuheshu3

    {

           public static void main(String[] args)

           {

                  Scanner input=new Scanner(System.in);

                  System.out.println("请输入n和m的值");

                  int n=input.nextInt();

                  int m=input.nextInt();

                  System.out.println("C"+"["+m+","+n+"]"+"="+digui(n,m));

           }

           public static int digui(int n,int m)

           {

                  if(m<n)

                  {

                         System.out.println("输入错误!");

                  }

                  if(n==1)

                  {

                         return m;

                  }

                  if(m==n)

                  {

                         return 1;

                  }

                  return digui(n-1,m-1)+digui(n,m-1);

           }

    }

    结果截图:

    4.汉诺塔问题

    设计思想:

    1.首先利用界面将输出语句输出;

    2.设置abc三个字符型变量用来表示三个塔;

    3.定义一个move函数,用来存储汉诺塔解决的方法;

    4.当m(环的个数)=1时,直接将盘子从a移动到c即可;

    5.如果盘子个数超过2,就用递归的思想解决;

    6.第一处递归:move(m-1,a,c,b)实现将m-1个环从a,借助c,移动到b

    7.a->c实现将第n个环从a移动到c

    8.第二处递归:move(m-1,b,a,c)实现将m-1个环从b,借助a,移动到c

    程序流程图:

    源程序代码:

    //汉诺塔问题

    package hannuota;

    import javax.swing.JOptionPane;

    public class main {

           public static void main(String args[])

           {

                  String s=" ";

                  s=JOptionPane.showInputDialog("请输入环的个数");

                  int j=0;

                  char a='a',b='b',c='c';

                  j=Integer.parseInt(s);

                  move(j,a,b,c);

           }

           public static void move(int m,char a,char b,char c)

           {

                  if(m==1)

                  {

                         System.out.println(a+"->"+c);

                  }

                  else

                  {

                         move(m-1,a,c,b);

                         System.out.println(a+"->"+c);

                         move(m-1,b,a,c);

                  }

           }

    }

    结果截图:

    5.回文字符串问题

    设计思想:

    1.首先定义main函数,定义两个整型变量i,j用来表示字符串的位置下标,从零开始。

    2.接着定义一个布尔类型的函数judge用来判断字符串是否为回文字符串。

    3.如果字符串长度为1,直接返回true

    4.如果字符串长度大于1,则递归判断。每次判断结束后,i+1,j-1,直到判断结束。

    程序流程图:

    源程序代码:
    //输入一个字符串,判断其是否为回文字串
    package palindrome;
    import java.util.Scanner;

    public class Huiwen
    {
    public static void main(String[] args)
    {
    String str=" ";
    System.out.println("请输入要判断的字符串(true表示回文字串,false表示非回文字串)");
    Scanner input=new Scanner(System.in);
    str=input.next();
    int i=0;
    int j=str.length()-1;
    System.out.println(Huiwen.judge(str,i,j));
    }
    public static boolean judge(String s,int i,int j)
    {
    if(i>j)
    throw new IllegalArgumentException();
    if(i==j)
    return true;
    else
    {
    return(s.charAt(i)==s.charAt(j)) && judge(s,i+1,j-1);
    }
    }
    }

     结果截图:

  • 相关阅读:
    JS替换字符串多余的空格符
    WebStorm2017.3.4版本 注册码
    使用$.getJSON()需要注意的地方
    45道CSS基础面试题(附答案)
    单机版搭建Hadoop环境图文教程详解
    Ubuntu下安装JDK图文详解
    VMtools安装以及设置
    Ubuntu 12.04中文输入法的安装
    Hadoop 学习之 FAQ
    java ant 命令大全
  • 原文地址:https://www.cnblogs.com/wenqiu1998/p/7663822.html
Copyright © 2011-2022 走看看