java 上机_Java上机实验二

这篇博客介绍了三个Java上机实验,包括使用递归计算阶乘来实现组合数公式,通过杨辉三角形计算组合数,以及使用递归解决汉诺塔问题和判断回文字符串。实验详细展示了程序设计思想、流程图和源代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

课后作业1:(1)使用组合数公式利用n!来计算

设计思想:设计一个方法,用来计算n的阶乘,方法参数为一个long类型变量。用递归方法实现计算阶乘计算,当传入参数为0或者1时为递归最后条件,不满足条件时进行递归调用,直到符合。然后在主函数将组合数公式表示出来进行计算。

程序流程图:

6a76a1ee3c229066afaf808053859f82.png

程序源代码:

import java.util.Scanner;

//(1)

public class zuheshu {

static public long jiecheng(long n)

{

long m=0;

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

{

m=1;

}

else

{

m=n*jiecheng(n-1);

}

return m;

}

public static void main(String[] args) {

// TODO 自动生成的方法存根

Scanner input=new Scanner(System.in);

long jieshu,dishu,p;

System.out.println("请输入底数:\n");

dishu=input.nextLong();

System.out.println("请输入阶数:\n");

jieshu=input.nextLong();

p=jiecheng(dishu)/(jiecheng(jieshu)*jiecheng(dishu-jieshu));

System.out.println("结果为:\n");

System.out.println(p);

}

}

结果截图:

0c007ea3cf5681c6ae4e872ef3deb528.png

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

设计思想:定义一个二维数组,用来表示底数和阶数,数组首元素定为1,定义循环体,表示出公式,一层层逐渐递推到数组的首元素,实现计算。

程序流程图:

1e44db2dfec8fd20c7fff98bef40ee10.png

程序源代码:

import java.util.Scanner;

//(2)

public class yanghui {

public static void main(String[] args) {

// TODO 自动生成的方法存根

Scanner input=new Scanner(System.in);

long a[][]=new long[30][30];

System.out.println("请输入底数:\n");

int n=input.nextInt();

System.out.println("请输入阶数:\n");

int k=input.nextInt();

a[0][0]=1;

int i,j;

for(i=1;i<30;i++)

{

for(j=1;j<=i;j++)

{

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

}

}

System.out.println("得到的结果为:\n");

System.out.println(a[n+1][k+1]);

}

}

结果截图:

c2659d49da130114a3c535cfd15201ec.png

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

设计思想:设计一个方法,当传入的底数或者阶数为1时为递归的最后条件,如果不满足则进行递归调用,两个参数逐渐降低,直到符合底数或者阶数为1的条件。

程序流程图:

12073e8015bfc9526e9b36931e901921.png

程序源代码:

import java.util.Scanner;

//(3)

public class jiecheng {

static public long jiecheng(int n,int k)

{

if(n==1||k==1)

{

return 1;

}

else

{

return jiecheng(n-1,k-1)+jiecheng(n-1,k);

}

}

public static void main(String[] args) {

// TODO 自动生成的方法存根

Scanner input=new Scanner(System.in);

System.out.println("请输入底数:\n");

int n=input.nextInt();

System.out.println("请输入阶数:\n");

int k=input.nextInt();

long num=jiecheng(n,k);

System.out.println("得到的结果为:");

System.out.println(num);

}

}

结果截图:

b048b241ec4264edc576afee9d27609c.png

课后作业2.递归编程解决汉诺塔问题

设计思想:将n个盘子从A座移到C座可以分解为三步:

(1)将A上n-1个盘子借助C座先移到B座

(2)将A座上剩下的一个盘移到C座

(3)将n-1个盘从B座借助A座移到C座上

程序流程图:

bc278cb799e2abb7bc2f962879611fac.png

程序源代码:

import java.util.Scanner;

public class hannuota {

public static void move(char x,char y)

{

System.out.println(x+"-->"+y);

}

static public void hanoi(int n,char one,char two,char three)

{

if(n==1)

{

move(one,three);

}

else

{

hanoi(n-1,one,three,two);

move(one,three);

hanoi(n-1,two,one,three);

}

}

public static void main(String[] args) {

// TODO 自动生成的方法存根

Scanner input=new Scanner(System.in);

System.out.println("请输入塔层数:\n");

int n=input.nextInt();

hanoi(n,'A','B','C');

}

}

结果截图:

d283349575002b8d0dcacea4079a3a5f.png

课后作业3.使用递归方式判断某个字串是否是回文。

设计思想:首先输入一个字符串,运用函数判断字符串的位数,如果是单数则中间那个字符可以不进行判断,双数对称进行判断是否相等。在这个过程中需要将字符串转化为一个char类型的数组,用于比较。

程序流程图:

205f453503bba294d134405f42dbb870.png

程序源代码:

import java.util.Scanner;

public class huiwen {

public static void main(String[] args) {

// TODO 自动生成的方法存根

Scanner input=new Scanner(System.in);

String num="abc";

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

num=input.next();

int a=num.length();

char[]b=num.toCharArray();//定义一个字符数组存放字符串每一位的字母

int i,c,flag=0;

c=a;

if(c%2==0)

{

for(i=0;i

{

if(b[i]==b[a-1])

{

a=a-1;

}

else

{

flag=1;//旗帜变量为1表示不是回文数

}

}

if(flag==0)

{

System.out.println("该字符串是回文字符串");

}

else

{

System.out.println("该字符串不是回文字符串");

}

}

else

{

for(i=0;i

{

if(b[i]==b[a-1])

{

a=a-1;

}

else

{

flag=1;//旗帜变量为1表示不是回文数

}

}

if(flag==0)

{

System.out.println("该字符串是回文字符串");

}

else

{

System.out.println("该字符串不是回文字符串");

}

}

}

}

结果截图:

f06d13cfee61f1c433483b8a5745211c.png

ac23fbfdbc65bb34ffc8e76f9b28dfc6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值