Java02-方法 课后作业

一、组合数

1.设计思想

首先定义两个变量n和k,采用三种方法计算组合数

第一种,利用组合数公式计算,这种方法主要就是定义一个求阶乘的方法,利用递归可以求得阶乘

第二种,利用递归的方法使用组合数递推公式,递归调用函数,从后往前推导

第三种,利用杨辉三角的原理,设置二维数组,从上到下依次保存杨辉三角所得数,根据输入的nk值,找出对应的值

2.流程图

(1)

(2)

(3)

3.源代码

package test;
import java.util.Scanner;
import java.math.BigInteger;
public class Classtest1
{
public static BigInteger zuheshu(int k,int n)
{
BigInteger i;
i=jiecheng(n).divide((jiecheng(k).multiply(jiecheng(n-k))));
return i;
}
public static BigInteger jiecheng(int i)
{
if(i==1 || i==0){
return BigInteger.valueOf(1);
}
return BigInteger.valueOf(i).multiply(jiecheng((i-1)));
}
public static BigInteger cal(int k,int n)
{
if(n==k||k==0)
return BigInteger.valueOf(1);
else if(k==1)
return BigInteger.valueOf(n);
else
return cal(k,n-1).add(cal(k-1,n-1));
}
public static int Ditui(int i,int j)
{
int a[][]=new int[100][100];
a[0][0]=1;
int result=1;
for(int p=1;p<100;p++)
for(int q=0;q<=p;q++)
{
if(q==0||p==q)
{
a[p][q]=1;
}
else
a[p][q]=a[p-1][q-1]+a[p-1][q];
if(p==i&&q==j)
{
result=a[p][q];
break;
}

}

return result;
}
public static void main(String[] args)
{
int n,k;
Scanner input=new Scanner(System.in);
System.out.println("请输入一个正整数作为n值:");
n=input.nextInt();
System.out.println("请输入一个正整数作为k值:");
k=input.nextInt();
System.out.println("使用组合数公式计算出的组合数个数为:"+zuheshu(k,n));
System.out.println("使用递归的方法计算出的组合数个数为:"+cal(k,n));
System.out.println("使用杨辉三角计算出的组合数个数为:"+Ditui(n,k));
}
}

4.截图

 

二、汉诺塔

1.设计思想

三个柱子:1.原柱子2.中间柱(辅助)3.目标柱

首先把1柱上"共"n-1个通过3移到2(递归),如果只剩一个:把1柱上"第"n个直接移动到3柱,把2柱上"共"n-1个通过1移到3(递归)

2.流程图

3.源代码

package test;
import java.util.Scanner;
public class Classtest2
{
public void Hnt(int a,char one,char two,char three)
{
if(a==1)
move(one,three);
else
{
Hnt(a-1,one,three,two);
move(one,three);
Hnt(a-1,two,one,three);
}
}
public void move(char x,char y)
{
System.out.println("从"+x+"移动到"+y);
}
public static void main(String[] args)
{
Classtest2 h=new Classtest2();
Scanner input=new Scanner(System.in);
System.out.print("请输入初始盘子数量:");
int num=input.nextInt();
h.Hnt(num,'1','2','3');

}

}

4.截图

 

三、回文

1.设计思想

输入一个字符串,将字符串最大长度赋给一个变量,判断字符串长度,如果为0或1,则输出是回文数,如果不是,则调用递归,从字符串头尾字符开始分别判断是否相等。

2.流程图

3.源代码

package test;
import java.util.Scanner;
public class Classtest3
{
public int judge(String str,int length,int star,int stop)
{
if(length==0||length==1)
{
return 1;
}
if(str.charAt(star)!=str.charAt(stop))
{
return 0;
}
else
{
return judge(str,length-2,star+1,stop-1);
}
}

public static void main(String[] args)
{
Scanner input=new Scanner(System.in);
System.out.println("输入一个字符串:");
String str;
str=input.nextLine();
int l=str.length();
Classtest3 hw=new Classtest3 ();
if(hw.judge(str, l, 0, l-1)==1)
{
System.out.println("是回文字符串");
}
else
System.out.println("不是回文字符串");

}

}

4.截图

 

 

转载于:https://www.cnblogs.com/sakura--/p/7663026.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值