java作业(2)
课后作业01 组合数
.设计思想:设计一个函数A(int n)用来求n的阶乘,
然后再设计一个函数B(int n,int k)求组合数,B函数调用
A函数代入组合式公式,极为方便。最后在主函数中进行输入
,调用。
.程序流程:
设计一个函数int型A(int n)用来求n的阶乘并返回
设计一个int型的函数B(int n,int k)用来求组合数,调用A使其简化,最后返回所求的组合数
在main方法中定义n和k,进行输入赋值
判断n是否大于k如果n比k小错误提示然后退出
调用B函数求组合数
程序流程图
程序源代码:
import java.util.*;
public class Zuheshu {
public static int JC(int n)
{
if(n==0||n==1)return 1;
else return n*JC(n-1);
}
public static int Cnk(int n,int k)
{
return JC(n)/(JC(k)*JC(n-k));
}
public static void main(String args[])
{
int n,k;
Scanner put=new Scanner(System.in);
//System.out.println();
System.out.println("请输入n和k:");
n=put.nextInt();
k=put.nextInt();
if(k>n) {System.out.println("输入错误!");System.exit(-1);}
System.out.println("组合数C n k为:");
System.out.println(Cnk(n,k));
System.out.println("组合数C n k-1为:"+Cnk(n,k-1));
System.out.println("组合数Cnk 加上组合数Cnk-1为:"+(Cnk(n,k)+Cnk(n,k-1)));
System.out.println("组合数C n+1 k为:"+Cnk(n+1,k));
}
}
4.截图:
课后作业02 汉诺塔
设计思想:汉诺塔
1把A上的n-1个盘子借助C移到B
2把A上的第n个盘子移到C
3把B上的n-1个盘子借助A移到C
程序流程:
设计一个函数move(A,n,B)意思是把A上的第n个盘子移到C
设计函数hanoi(n,A,B,C)意思是把A上的n个盘子借助B移到C
如果n=1即递归的条件只需move(A,1,C)直接把他移到C
如果n不为1,把A上的n-1个盘子借助C移到B,然后最后一个盘子
直接移到C,再把B上的n-1个盘子借助A移到C
程序流程图
程序源代码:
import java.util.*;
public class Hanoi {
public static void move(char A,int n,char C)
{
System.out.println(n+","+A+","+C);
}
public static void hano(int n,char A,char B,char C)
{
if(n==1)move(A,1,C);
else
{
hano(n-1,A,C,B);
move(A,n,C);
hano(n-1,B,A,C);
}
}
public static void main(String args[])
{
int n;
char A=65,B=66,C=67;
Scanner put=new Scanner(System.in);
System.out.println("请输入n:");
n=put.nextInt();
hano(n,A,B,C);
}
}
4.截图:
课后作业 03 回文字符串
设计思想:
我们可以借助字符串的length,来对比两端的字符
通过length进行递归运算,比较第n个和第length-n,如果相等就递归下去,
否则返回flase,n从0到第length/2个
程序流程:
设计一个boolean函数用来判断回文数
递归比较第n个和第length-n个如果相等就继续递归,否则返回flase,n从第一个到第length/2个
通过main函数输入字符串,调用函数判断
程序流程图
程序源代码:
package Test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class HuiWen {
public static void main(String[] args)throws Exception {
String str ="";
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in),256);
System.out.println("请输入一串字符,每个字或单词用空格隔开:");
str = br.readLine();
System.out.println("检查结果: " + huiwen(str,0,str.length()-1));
}
public static boolean huiwen(String s,int start,int end){
if(start == end) return true;
if(start > end){
System.out.println("输入有误!");
return false;
}
if(s.charAt(start) == s.charAt(end)){
return huiwen(s,start+1,end-1);
}
else{
return false;
}
}
}
4.程序截图: