码迷,mamicode.com
首页 > 其他好文 > 详细

方法---课程作业02

时间:2017-10-14 01:20:18      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:int   static   span   ted   auto   递归   设计思想   char   com   

课后作业1

(1)使用组合数公式

1、程序设计思想

利用递归求n的阶乘,递归终止条件为:if(n==1||n==0) f=1;不终止则执行:f=n*fac(n-1);调用该方法分别求出n!、k!、(n-k)!,再利用组合数公式即可求出组合数。

2、流程图

技术分享

技术分享

 

3、源程序代码

import java.util.*;

public class Combination {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

         System.out.println("n个不同元素中取出k个元素,请分别输入nk的值:");

         int n,k,t;

         Scanner input=new Scanner(System.in);

           n=input.nextInt();

           k=input.nextInt();

         input.close();

         t=c(n,k);

         System.out.println(""+n+"个不同元素中取出"+k+"个元素,组合数为:"+t);

}

public static int c(int n,int k)   //n个不同元素中取出k个元素

{

int n1,k1,nk1,result;

n1=fac(n);

k1=fac(k);

nk1=fac(n-k);

result=n1/(k1*nk1);

return result;

}

public static int fac(int n)     //n的阶乘

{

int f;

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

f=1;

else f=n*fac(n-1);

return f;

}

 

}

4、截图

 技术分享

 

(2)使用递推的方法用杨辉三角计算

1、程序设计思想

先动态开辟一个足够大的二维数组,按杨辉三角中数的规律给该数组赋值,因为杨辉三角第n行第k列的元素为从n-1个不同元素中取k-1个元素的组合数,所以可根据该数组算出想求的组合数。

2、流程图

技术分享

技术分享

3、源程序代码

import java.util.*;

public class Combination {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

       System.out.println("n个不同元素中取出k个元素,请分别输入nk的值:");

       int n,k,t;

       Scanner input=new Scanner(System.in);

       n=input.nextInt();

       k=input.nextInt();

       input.close();

       t=yangHui(n,k);

       System.out.println(""+n+"个不同元素中取出"+k+"个元素,组合数为:"+t);

}

public static int yangHui(int n,int k)      //求杨辉三角中第n行第k列的元素

{

int i,j;

int arr[][]=new int [100][];

for(i=0;i<arr.length;i++)

{arr[i]=new int [i+1];

arr[i][0]=1;

     arr[i][i]=1;}

for(i=2;i<arr.length;i++)

{

for(j=1;j<arr[i].length-1;j++)

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

}

return arr[n][k];

}

 

}

4、截图

 技术分享

 

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

1、程序设计思想

组合数的递推公式为c(n,k)=c(n-1,k-1)+c(n-1,k),创建一个使用递归方法的函数,递归终止条件为:if(n==0) return 1;else if(n==1) return i;else if(n==k) return 1;调用该函数即可求出组合数。

2、流程图

 

技术分享

3、源程序代码

import java.util.Scanner;

public class Combination {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

         System.out.println("n个不同元素中取出k个元素,请分别输入nk的值:");

         int n,k,t;

         Scanner input=new Scanner(System.in);

           n=input.nextInt();

           k=input.nextInt();

         input.close();

         t=c(n,k);

         System.out.println(""+n+"个不同元素中取出"+k+"个元素,组合数为:"+t);

}

public static int c(int n,int k)  //n个不同元素中取出k个元素

{

if(k==0) return 1;

else if(n==1) return 1;

else if(n==k) return 1;

else return c(n-1,k-1)+c(n-1,k);

 

}

 

}

4、截图

技术分享

课后作业2

递归编程解决汉诺塔问题。

1、程序设计思想

假设要从A移动n个盘子到B,运用递归的方法,只需先将n-1个盘子借助C从A移到B,再将剩下的一个盘子从A直接移到C,最后再将B上的n-1个盘子借助A从B移到C即可。递归终止条件为:if(number==1) move(one,three)。

2、流程图

技术分享

3、源程序代码

import java.util.*;

public class HanLuo {

      public static void main(String args[])

      {

       System.out.print("请输入盘子的数量:");

       Scanner input=new Scanner(System.in);

       int number=input.nextInt();

       input.close();

       hanluo(number,‘A‘,‘B‘,‘C‘);

      }

      public static void hanluo(int number,char one,char two,char three)  //number个盘子借助"two""one"移到"three"

      {

       if(number==1) move(one,three);

       else {

       hanluo(number-1,one,three,two);

       move(one,three);

       hanluo(number-1,two,one,three);

       }

      }

      public static void move(char a,char b)

      {

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

      }

}

4、截图

技术分享

课后作业3

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

1、程序设计思想

输入一个字符串str,int n=str.length(),再利用str.length-n与str.length()-str.length()+n-1分别求出该字符串的第一个以及最后一个字符,将其进行比较,递归终止条件为:if(s1==s2&&L1>(length()/2-1)&&L1<L2)  j=1; else if(s1!=s2&&L1>(length()/2-1)&&L1<L2) j=0;

2、流程图

技术分享技术分享

3、源程序代码

import java.util.Scanner;

public class Palindrome {

 

public static void main(String[] args) {

// TODO Auto-generated method stub

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

         String str;

         int n;

         Scanner input=new Scanner(System.in);

           str=input.nextLine();

           input.close();

           n=str.length();

           int j=judge(str,n);

           if(j==1) System.out.println(str+"是回文字符串");

           else System.out.println(str+"不是回文字符串");

}

     public static int judge(String str,int n)

           {

int j=0;

if(str==""||str==null)

j=0;

 int l1,l2;

 char s1,s2;        //用字符串的第一个字符与最后一个字符比较,第二个与倒数第二个比较,依此类推

 l1=str.length()-n;

 l2=str.length()-l1-1;

 s1=str.charAt(l1);

 s2=str.charAt(l2);

 if(s1==s2&&l1>=(str.length()/2-1)&&l1<l2)   //比较到最中间的两个数是递归停止条件

 j=1;

 else  if(s1!=s2&&l1>=(str.length()/2-1)&&l1<l2)

 j=0;

 else j=judge(str,n-1);

 return j;

 

}

   

 

 

}

4、截图

技术分享

方法---课程作业02

标签:int   static   span   ted   auto   递归   设计思想   char   com   

原文地址:http://www.cnblogs.com/wyl814922595/p/7664076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!