02课后作业

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了02课后作业相关的知识,希望对你有一定的参考价值。

1、使用计算机计算组合数

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

(1)设计思想:设计功能函数fac()采用循环的方式,计算n!。在主类里输入所要计算的组合数的值,调用函数fac(),利用组合数计算公式计算出组合数。

(2)程序流程图:

技术分享

(3)源程序代码:

import java.util.Scanner;

public class Cnumber {

 

public static void main(String[] args) {

long k,n,s,s1=1,s2=1,s3=1;

Scanner scan=new Scanner(System.in);

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

n=scan.nextInt();

k=scan.nextInt();

s=fac(s1,n)/(fac(s2,k)*fac(s3,(n-k)));//调用fac()函数

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

}

   public static long fac(long s,long n)//使用循环的方法计算n!

    {

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

   {

   s=s*i;

   }

   return s;

}

}

(4)结果截图:

技术分享

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

(1)设计思想:输入c(n,k),设计函数sum()采用递推的方法计算n!,在主类里调用。递推“从前至后”。

(2)程序流程图:

 技术分享

(3)源程序代码:

import java.util.Scanner;

public class Cnumber3 {

 

public static void main(String[] args) {

long k,n,s,s1=1,s2=1,s3=1;

Scanner scan=new Scanner(System.in);

System.out.println("请输入组合数c(n,k):");

n=scan.nextInt();

k=scan.nextInt();

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

 

}

static long sum(long n,long k)//递推

{

long s=1,s1=1,s2=1;

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

{

s=s*i;

}

for(long i=1;i<=k;i++)

{

s1=s1*i;

}

for(long i=1;i<=n-k;i++)

{

s2=s2*i;

}

return s/(s1*s2);

}

 

}

 (4)结果截图:

技术分享

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

(1)设计思想:设计递归函数计算阶乘,在主类里调用。

2)程序流程图:

技术分享

(3)源程序代码:

import java.util.Scblic class Cnumber2 {

 

public static void main(String[] args) {

long k,n,s,s1=1,s2=1,s3=1;

Scanner scan=new Scanner(System.in);

System.out.println("递推公式:c(n,k)=c(n-1,k-1)+c(n-1,k)");

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

n=scan.nextInt();

k=scan.nextInt();

s=fac(n-1)/(fac(k-1)*fac(n-k-2))+fac(n-1)/(fac(k)*fac(n-1-k));

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

 

}

public static long fac(long n)//递归函数

{

long f=1;

if(n<0)

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

 

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

f=1;

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

return f;

}

}

(4)结果截图:

技术分享

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

(1)设计思想:输入盘子个数,设计两个函数move1()move()move1()函数实现从一个底座指向另一个底座的功能,move()为递归函数,在move()里调用move1(),在主类里调用move()

(2)程序流程图:

技术分享

(3)源程序代码:

import java.util.Scanner;

public class Hannuota {

 

public static void main(String[] args) {

int peg1=1;//三个底座定义为1,2,3

int peg2=2;

int peg3=3;

int n;//盘子的个数

Scanner scan=new Scanner(System.in);

System.out.println("input the number of diskes:");

n=scan.nextInt();

System.out.println("The step to move"+n+"diskes");

move(n,peg1,peg2,peg3);

}

public static void move(int n,int peg1,int peg2,int peg3)

{//将n个盘子借助peg2,移到peg3

if(n==1)

move1(peg1,peg3);

else

{

move(n-1,peg1,peg3,peg2);

move1(peg1,peg3);

move(n-1,peg2,peg1,peg3);

}

}

public static void move1(int p1,int p2)

{

System.out.println(p1+"->"+p2);

}

 

}

}

(4)结果截图:

技术分享

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

1)设计思想:输入字符串定义ij来比较前后位置的字符是否相同,设计递归函数judge(),在主类里调用。

2)程序流程图:

 技术分享

(3)源程序代码:

import java.util.Scanner;

 

public class Huiwenshu

{

public static void main(String[] args)

{

String str=" ";

System.out.println("请输入要判断的字符串(true表示回文字串,false表示非回文字串)");

Scanner input=new Scanner(System.in);

str=input.next();

int j=str.length()-1;

int i=0;

System.out.println(Huiwenshu.judge(str,i,j));

 

}

public static boolean judge(String s,int i,int j)

{

if(i>j)

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

if(i==j)

return true;

else

 

return(s.charAt(i)==s.charAt(j)) && judge(s,i+1,j-1);

 

}

}

4)结果截图:

技术分享技术分享

 

以上是关于02课后作业的主要内容,如果未能解决你的问题,请参考以下文章

02方法 课后作业1

02课后作业

02方法 课后作业2

02方法课后作业

java面向对象(第一章课后作业)02

2017-10-27 课后作业02