课后作业02
Posted ★若风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课后作业02相关的知识,希望对你有一定的参考价值。
用Java实现汉诺塔:
程序设计思想:
1.首先输入盘子的数量n,如果盘子的数量是1,则直接将编号为1的圆盘从A移到C,递归结束。
2.否则:
递归,将A上编号为1至n-1的圆盘移到B,C做辅助塔;
直接将编号为n的圆盘从A到C;
递归,将B上的编号为1至n-1的圆盘移到C,A做辅助塔。
程序流程图:
程序源代码:
package tourial2;
import java.util.Scanner;
public class Hanio {
public static int m=0;
public static void move (String A,int n,String C)
{
System.out.println(++m+": "+n+","+A+"->"+C);
}
public static void Hanio (int n,String A,String B,String C)
{
if(n==1)
move(A,1,C);
else
{
Hanio(n-1,A,C,B);
move(A,n,C);
Hanio(n-1,B,A,C);
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
String A ,B ,C ;
Scanner input=new Scanner(System.in);
System.out.println("请输入三个盘子的名称:");
A=input.next();
B=input.next();
C=input.next();
System.out.println("请输入盘子的个数:");
int n=input.nextInt();
Hanio(n,A,B,C);
}
}
程序截图:
问题二:随意输入一个任意大小的字符串,判断他是不是回文字符串。
程序设计思想:
从键盘随意输入一个字符串,并将其赋值给一个数组,然后用递归进行,若i=j,泽肯定是递归,否则从数组的首元素与尾元素进行比较,若相等,则进行i++与j--,不断向中间靠拢,直到达到判断条件i>=j(i=j是输入的字符串的长度为偶数个,i>j是输入的字符串有奇数个),中间若有一次不符合判断,直接跳出递归,结束进程,输出不是回文字符串。(i是指的字符串的第一个元素的下标,j是指的字符串的最后一个元素的下标)
程序设计流程图:
程序源代码:
package tourial2;
import java.util.Scanner;
public class huiwenshu {
public static void huiwen(char a[],int j,int i)
{
if(i>=j)
{
if(a[i]==a[j])
System.out.println("是回文");
System.exit(0);
}
if(a[i] == a[j])
huiwen(a,--j,++i);
else
{
System.out.println("他不是回文数!");
System.exit(0);
}
}
public static void main(String[] args)
{
String s;
int j;
int i=0;
Scanner input=new Scanner(System.in);
System.out.println("请输入 一个字符串:");
s=input.next();
char a[];
a=s.toCharArray();
j=a.length-1;
for( int k=0;k<s.length();k++)
{
System.out.print (a[k]);
}
huiwen(a,j,i);
}
}
程序截图:
根据杨辉三角递推求组合数
程序设计思想:
根据杨辉三角的规律,得出杨辉三角的第n行的第m个的值等于该位置的元素的上一行的左右两个输的和,然后根据杨辉三角与组合数的关系即c(n,m)等于杨辉三角的第n+1的第m+1个元素的值,根据这个来写出组合数的值。
程序流程图:
程序源代码:
package tourial2;
import java.util.Scanner;
public class yanghuisanjiao
{
public static void yanghuisanjiao(int n,int m)
{
if(m==1)
{
System.out.println("输出结果为:");
System.out.println(n);
}
else
{
n=n+1;
int a[][] = new int [n][n];
System.out.println(1);
for(int i=0;i<n;i++)
a[i][0]=1;
for(int i=1;i<n;i++)
{
System.out.print(1+" ");
for(int j=1;j<=i;j++)
{
a[i][j]=a[i-1][j]+a[i-1][j-1];
System.out.print(" "+a[i][j]);
}
System.out.println();
}
System.out.println();
System.out.println("输出结果:");
System.out.println(a[n-1][m]);
}
}
public static void main(String[] args) {
int x,y;
Scanner input=new Scanner(System.in);
System.out.println("请输入第一个数:");
x=input.nextInt();
System.out.println("请输入第二个数:");
y=input.nextInt();
while(x>y)
{
System.out.println("请重新输入:");
System.out.println("请输入第一个数:");
x=input.nextInt();
System.out.println("请输入第二个数:");
y=input.nextInt();
}
yanghuisanjiao(y,x);
}
}
程序截图:
利用阶乘公式来计算组合式:
程序设计思想:
根据公式
来计算组合数的大小,从键盘输入n,m的值,设计一个计算阶乘的大小,如果输入的数a为1或0,则直接return 1,否则运用递归,计算a-1的阶乘,直到a为1时,递归结束。
程序流程图:
阶乘的流程图:
程序的源代码:
package tourial2;
import java.math.BigInteger;
import java.util.Scanner;
public class zuheshu {
public static BigInteger calculateN2(int n) {
if(n==1 || n==0){
return BigInteger.valueOf(1);
}
return BigInteger.valueOf(n).multiply(calculateN2((n-1)));
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入N1:");
int number1=scanner.nextInt();
BigInteger f1=calculateN2(number1);
//System.out.println(number1+"!="+calculateN2(number1));
System.out.print("请输入N2:");
int number2=scanner.nextInt();
BigInteger f2=calculateN2(number2);
BigInteger f3=calculateN2(number1-number2);
//System.out.println(number2+"!="+calculateN2(number2));
BigInteger f4=f2.multiply(f3);
BigInteger f5= f1.divide(f4);
System.out.println("组合输的结果是:"+f5);
}
}
程序截图:
运用公式计算组合数:
程序设计思想:
输入n,m,两个数(来组成要求出的组合数)(n>m),如果m=1,则输出结果n,如果m!=1,则进入递归,运用公式,直到进行到n-m=1的时候,结束递归,输出结果。
程序流程图:
程序源代码:
package tourial2;
import java.util.Scanner;
public class gongshi {
public static int yang(int n,int m)
{
int b;
if(m!=1)
{
while(n-m==1)
{
return n;
}
b=yang(n-1,m-1)+yang(n-1,m);
}
else
b=n;
return b;
}
public static void main(String[] args) {
int n,m;
Scanner input=new Scanner(System.in);
System.out.println("请输入两个数:");
n=input.nextInt();
m=input.nextInt();
System.out.println("输出结果:"+yang(n,m));
}
}
程序截图:
以上是关于课后作业02的主要内容,如果未能解决你的问题,请参考以下文章