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.截图