课程作业01
1.1使用组合数公式利用n!来计算

设计思想:借助n!来计算n! k! (n-k)!进而求出C(n,k)
程序流程图:

源程序代码:
package zuheshu;
import java.util.Scanner;
public class zuheshu {
public static void diyige() {
zuheshu j=new zuheshu();
int b;
long d;
Scanner in=new Scanner(System.in);
System.out.print("请输入N的值:");
int n=in.nextInt();
System.out.print("请输入K的值(K<N):");
int k=in.nextInt();
b=n-k;
long i=j.f(n);
long a=j.f(k);
long c=j.f(b);
d=i/a/c;
System.out.print("C("+n+","+k+")"+"="+d);
}
public long f(int n) {
if(n==1)
{
return 1;
}
return n*f(n-1);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
diyige();
}
}
结果截图:
1.2使用递推的方法用杨辉三角形计算

设计思想:利用杨辉三角的坐标得出C(n,k)的值
程序流程图:

程序源代码:
import java.util.Scanner;
public class dierge {
public static int yanghui(int n,int m) {
int[][] arr= new int[n+1][n+1];
for(int i=0;i<n+1;i++)
{
for(int j=i+1;j<n+1;j++)
{
arr[i][j]=0;
}
for(int j=0;j<i;j++)
{
if(j==0)
{
arr[i][j]=1;
}
else
{
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
}
return arr[n][m];
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
System.out.printf("请输入N的值:");
int n=in.nextInt();
System.out.printf("请输入K的值:");
int k=in.nextInt();
System.out.println(yanghui(n+1,k));
}
}
结果截图:
1.3使用递归的方法用组合数递推公式计算
设计思想:利用对组合数公式进行递归来求出最后的值
程序流程图:

程序源代码:
import java.util.Scanner;
public class disange {
public static int jiecheng(int m,int n)
{
if(m<0||n<0||m<n)
return 0;
if(m==n)
return 1;
if(n==1)
return m;
return jiecheng(m-1,n)+jiecheng(m-1,n-1);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.printf("输入N的值:");
Scanner in1=new Scanner(System.in);
Scanner in2=new Scanner(System.in);
int m=in1.nextInt();
System.out.printf("输入k的值:");
int n=in2.nextInt();
in1.close();
in2.close();
System.out.println("C("+m+","+n+")="+jiecheng(m,n));
}
}
结果截图:
2递归编程解决汉诺塔问题。
设计思想:利用中间塔与目标塔的轮换交替来使盘子移动到目标塔 对以上步骤进行递归解决这个问题
程序流程图:

程序源代码:
package hannuota;
import java.util.Scanner;
public class hannuota {
int i=1;
public static void move(int n,char qishi,char mubiao)
{
System.out.println("将"+qishi+"号盘子"+"---->"+mubiao+"号盘子");
}
public static void hanoi(int n,char qishi,char jieyong,char mubiao)
{
if (n==1)
move(1,qishi,mubiao);
else
{
hanoi(n-1,qishi,mubiao,jieyong);
move(n,qishi,mubiao);
hanoi(n-1,jieyong,qishi,mubiao);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.printf("请输入盘子的个数");
Scanner in=new Scanner(System.in);
int n=in.nextInt();
char x='A',y='B',z='C';
System.out.println("盘子移动情况如下:");
hanoi(n,x,y,z);
}
}
结果截图:
3使用递归方式判断某个字串是否是回文
设计思想:对输入的字符串进行前后元素的对比 若相同则ture不然为false
程序流程图:

程序源代码;
package huiwen;
import java.util.Scanner;
public class huiwen {
public static boolean isHuiWen(String text)
{
int length = text.length();
for (int i = 0; i < length / 2; i++)
{
if (text.toCharArray()[i] != text.toCharArray()[length - i - 1])
{
return false;
}
}
return true;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
String text = in.next();
System.out.println(isHuiWen(text));
}
}
结果截图:

浙公网安备 33010602011771号