第二次作业

课程作业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));
}

}

程序结果截图:

原文地址:https://www.cnblogs.com/andibier/p/7660297.html