zoukankan      html  css  js  c++  java
  • 课堂作业02-2

    一、        课程作业01_1

    1.   实验题目


    使用组合数公式利用n!来计算⒈

    2.   设计思想

    设计一个可以求n!的方法,提示用户输入n和k两个变量,若输入的数符合要求,调用求阶乘的方法,套用公式,求出结果。

    3.   程序流程图

    4.   源程序代码

    import java.util.Scanner;

    public class Homework02_1 {

           public static void main(String[] args)

           {

                  Homework02_1 h=new Homework02_1();

                  h.go();

           }

           public void go()

           {

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

                  @SuppressWarnings("resource")

                  Scanner scanner=new Scanner(System.in);

                  int n=scanner.nextInt(),k=scanner.nextInt();

                  if(n>=k&&k>=0&&n>0)//判断n和k是否符合要求

                         System.out.println("C("+n+","+k+")="+f(n)/f(k)/f(n-k));

                  else System.out.println("输入的数不符合要求");

           }

           public int f(int n)//递归求阶乘

           {

                  if(n==0||n==1)

                         return 1;

                  else

                         return n*f(n-1);

           }

    }

    5.   结果截图

     

    二、        课程作业01_2

    1.  实验题目

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

     

    2.  设计思想

    根据用户输入的数创建一个数组,三角形,用数组把三角形,用递推法算出杨辉三角形中的每一个数,存在数组中,然后C(n,k)就等于数组中第n-1行k-1列的数。

    3.  程序流程图

    4.  源程序代码

    import java.util.Scanner;

     

    public class Homework02_1_2 {

          public static void main(String[] args)

          {

                   Homework02_1_2 h=new Homework02_1_2();

                   h.go();

          }

          public void go()

          {

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

                   @SuppressWarnings("resource")

                   Scanner scanner=new Scanner(System.in);

                   int n=scanner.nextInt(),k=scanner.nextInt();

                   if(n>=k&&k>=0&&n>0)//判断n和k是否符合要求

                             System.out.println("C("+n+","+k+")="+createArrayAndReturn(n,k));

                   else System.out.println("输入的数不符合要求");

          }

          public int createArrayAndReturn(int n,int k)

          {

                   int [][]array=new int[n+1][];

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

                   {

                             array[i]=new int[i+1];//创建一个第i行有i个元素的数组

                   }

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

                   {

                             array[i][0]=1;//每行第一个和最后一个元素都为1

                             array[i][i]=1;

                            for(int j=1;j<i;j++)//其他的元素都为其上一行对应肩上两个元素的和

                             {

                                      array[i][j]=array[i-1][j-1]+array[i-1][j];

                             }

                   }

                   return array[n][k];

          }

    }

    5.  结果截图

    三、        课程作业01_3

    1.  实验题目


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

    2.  设计思想

    声明一个可以求C(n,k)值的函数,每次递推套用杨辉三角形公式,直到n=k或者k=1。

    3.  程序流程图

     

    4.  源程序代码

    import java.util.Scanner;

     

    public class Homework02_1_2 {

          public static void main(String[] args)

          {

                   Homework02_1_2 h=new Homework02_1_2();

                   h.go();

          }

          public void go()

          {

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

                   @SuppressWarnings("resource")

                   Scanner scanner=new Scanner(System.in);

                   int n=scanner.nextInt(),k=scanner.nextInt();

                   if(n>=k&&k>=0&&n>0)//判断n和k是否符合要求

                             System.out.println("C("+n+","+k+")="+C(n,k));

                   else System.out.println("输入的数不符合要求");

          }

          public int C(int n,int k)//递推法运用杨辉三角形公式

          {

                   if(k==1)

                             return n;

                   else if(n==k)

                             return 1;

                   else return C(n-1,k-1)+C(n-1,k);//杨辉三角形公式

          }

    }

    5.  结果截图

    四、        课程作业02

    1.  实验题目

    递归编程解决汉诺塔问题。用Java实现

    2.  设计思想

    使用递归方法,定义一个move(char,char)方法和一个hanoi ( int,char,char,char)方法。

    第一步将A上n-1个盘子借助C移到B上

    第二步将A上一个盘子移到C上

    第三步将B上n-1个盘子借助A移到C上

    3.  程序流程图

    4.  源程序代码

    import java.util.Scanner;

     

    public class Homework02_2 {

          public static void main(String[] args)

          {

                   Homework02_2 h=new Homework02_2();

                   h.go();

          }

          public void go()

          {

                   System.out.println("请输入盘子的个数n:");

                   @SuppressWarnings("resource")

                   Scanner scanner=new Scanner(System.in);

                   int n=scanner.nextInt();

                   if(n>=0)//判断n是否符合要求

                   {

                             System.out.println("移动"+n+"个盘子的步骤为:");

                             hanoi(n,'A','B','C');

                   }

                   else System.out.println("输入的数不符合要求");

          }

          public void hanoi(int m,char one,char two,char three)

          {

                   if(m==1)

                             move(one,three);

                   else

                   {

                             hanoi(m-1,one,three,two);//第一步将A上n-1个盘子借助C移到B上

                             move(one,three);//第二步将A上一个盘子移到C上

                             hanoi(m-1,two,one,three);//第三步将B上n-1个盘子借助A移到C上

                   }

          }

          public void move(char x,char y)

          {

                   System.out.println(x+"->"+y);

          }

    }

    5.  结果截图

    五、        课程作业03

    1.  实验题目

    使用递归方式判断某个字串是否是回文( palindrome )

    2.  设计思想

    取得用户输入的字符串,调用String的length()函数获得字符个数,声明一个数组,使用for循环和charAT函数将数组初始化。

    之后使用一个返回类型为boolean的递归函数,以循环次数和判断对应位置数字是否相等决定是否结束递归函数。

    3.  程序流程图 

    4.  源程序代码

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

     

    public class Homework02_3 {

          public static void main(String[] args)

          {

                   Homework02_3 h=new Homework02_3();

                   try {//处理有异常的方法

                             h.go();

                   } catch (IOException e) {

                             // TODO Auto-generated catch block

                             e.printStackTrace();

                   }

          }

          public void go() throws IOException//声明这个方法是有风险的

          {

                   String input=null;

                   System.out.println("输入字符串:");

                   BufferedReader is=new BufferedReader(new InputStreamReader(System.in));

                   input=is.readLine();

                  

                   if(!input.isEmpty())//判断n是否符合要求

                   {

                             int [] array=new int[input.length()];

                             for(int i=0;i<input.length();i++)//将字符串中的每一个字符取出,赋给数组

                             {

                                      array[i]=input.charAt(i);

                             }

                             System.out.println("是回文数?"+ifHuiWen(array,0));

                   }

                   else System.out.println("输入的数不符合要求");

          }

          public boolean ifHuiWen(int[] a,int l)//递归法判断是否是回文数

          {

                   if(l==a.length/2)//执行到一定次数的时候还没有返回false,说明就是回文数了

                             return true;

                   if(a[l]==a[a.length-l-1])

                             return ifHuiWen(a,l+1);

                   else return false;

                  

          }

    }

    5.  结果截图

  • 相关阅读:
    取得GridView被隐藏列的值方法集合
    【转】ASP.NET 数据分页第一篇 探讨分页原理及 SQL Server 2005 的 ROW_NUMBER 函数
    浏览器的工作原理:新式网络浏览器幕后揭秘
    无法装载文件或者汇编的AjaxControlToolkit
    【转】ASP.NET 数据分页第二篇 范例下载
    在用户控件中FindControl控件
    【转】ASP.NET 数据分页第三篇 结合 Custom Control 处理 GridView 的 UI 呈现
    Ajax Toolkit AutoComplete 几种用法
    到底如何区分什么是架构、框架、模式和平台 ?
    因果推理综述——《A Survey on Causal Inference》一文的总结和梳理
  • 原文地址:https://www.cnblogs.com/w-honey/p/7661393.html
Copyright © 2011-2022 走看看