第二次作业
Posted 安迪比尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二次作业相关的知识,希望对你有一定的参考价值。
课程作业01:
1.使用计算机计算组合数:
(1).使用组合数公式n!来计算
设计思想:利用递归把n的阶乘求出来,再利用组合数的公式求出组合数。
程序流程图:
源程序代码:
import java.util.Scanner;
import org.omg.CORBA.PUBLIC_MEMBER;
public class Comninanum {
public int f(int n)//阶乘
{
int sum;
if(n!=1)
{
sum=f(n-1)*n;
}
else sum=1;
return sum;
}
public void calculate(int n,int k)
{
int result;
result=f(n)/(f(k)*f(n-k));
System.out.println("该组合数的结果为:"+result);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Comninanum com=new Comninanum();
int n,k;
Scanner cin=new Scanner(System.in);
System.out.println("输入底数:");
n=cin.nextInt();
System.out.println("输入阶数:");
k=cin.nextInt();
com.calculate(n, k);
}
}
程序结果截图:
(2).使用递推的方法用杨辉三角计算:
程序设计思想:计算出杨辉三角每个位置的值,利用组合数的公式,求出组合数。
程序流程图:
源程序代码:
import java.util.Scanner;
public class Zuoye2 {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int n,k;
Scanner cin=new Scanner(System.in);
System.out.println("输入底数n:");
n=cin.nextInt();
System.out.println("输入阶数k:");
k=cin.nextInt();
int [][]f=new int[27][27];
f[0][0]=1;
for(int i=1;i<=24;i++)
{
for(int j=1;j<=i;j++)
{
f[i][j]=f[i-1][j-1]+f[i-1][j];
}
}
System.out.println("组合数的值为:"+f[n+1][k+1]);
}
}
程序结果截图:
(3).利用递归的方法用组合数递推公式计算
程序设计思想:借助组合数公式,编写一个函数求出组合数。
程序流程图:
源程序代码:
package zuoye3;
import java.util.Scanner;
public class Zuoye3 {
public static int zuhe(int n,int k)
{
if(k==0) return 1;
else if(n==1) return 1;
else if(n==k) return 1;
else return(zuhe(n-1,k-1)+zuhe(n-1,k));
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int n,k;
Scanner cin=new Scanner(System.in);
System.out.println("输入底数n:");
n=cin.nextInt();
System.out.println("输入阶数k:");
k=cin.nextInt();
System.out.println("组合数的结果为:"+zuhe(n,k));
}
}
程序结果截图:
2.汉诺塔问题
程序设计思想:汉诺塔问题可以分为两类人去做,一类去把第n个圆盘搬到要放的为止,第二类人把n-1个圆盘先搬到辅助的塔,再搬到要放的塔。利用递归实现
程序设计流程图:
源程序代码:
import java.util.Scanner;
public class Zuoye4 {
public static void han(int n,String one,String two,String three)
{
if(n==1)
move(n,one,three);
else
{
han(n-1,one,three,two);
move(n,one,three);
han(n-1,two,one,three);
}
}
public static void move(int n,String peg1,String peg2)
{
System.out.println("第"+n+"个圆盘:"+peg1+"->"+peg2);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int n;
Scanner cin=new Scanner(System.in);
System.out.println("输入圆盘的个数:");
n=cin.nextInt();
han(n,"peg1","peg2","peg3");
}
}
程序结果截图:
3.判断回文字符
程序设计思想:判断是否是回文,先判断第一个和最后一个字符是否相等,再判断第二个和倒数第二个字符,依次递归;另外,如果只有一个字符和0个字符,那么也是回文的。
程序设计流程图:
源程序代码:
package zuoye4;
import java.util.Scanner;
public class Huiwen {
public static boolean huiwen(String s,int i,int j)
{
if(i==j) return true;
else return(s.charAt(i)==s.charAt(j)&&huiwen(s,i+1,j-1));
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
String s;
int i,j;
System.out.println("输入字符串:");
Scanner cin=new Scanner(System.in);
s=cin.nextLine();
i=0;
j=s.length()-1;
System.out.println("是否是回文:"+huiwen(s,i,j));
}
}
程序结果截图:
以上是关于第二次作业的主要内容,如果未能解决你的问题,请参考以下文章