作业一
一、组合数n!计算C(n,k)=n!/k!/(n-k)!
设计思想
(1)输入n和k
(2)判断n和k的大小
(3)判断n和k是否为1或0
(4)计算n!K!(n-k)!,最后计算除C(n,k)
流程图
源代码
import java.math.BigInteger;
import java.util.Scanner;
public class Zuoye01 {
public static void main(String[] args) {
System.out.print("请输入N:");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
System.out.print("请输入K:");
Scanner reader=new Scanner(System.in);
int k=scanner.nextInt();
if(n<k){System.out.println("输入错误!");return;}
else{
long number=0;
number=calculateN(n)/(calculateN(k)*calculateN(n-k));
System.out.println("Cnk :"+number);
}
}
public static long calculateN(int n) {
if(n==1 || n==0){
return 1;
}
return n*calculateN(n-1);
}
}
程序截图
二、使用递推方法用杨辉三角计算
设计思想
(1)输入n和k
(2)判断n和k的大小
(3)判断n和k是否为1或0
(4)计算n!K!(n-k)!(n+1-k)!(k-1)!
(5)number1=C(n,k-1),number2=C(n,k)
(6)计算出结果number1+number2
流程图
源代码
import java.math.BigInteger;
import java.util.Scanner;
public class Zuoye01 {
public static void main(String[] args) {
System.out.print("请输入N:");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
System.out.print("请输入K:");
Scanner reader=new Scanner(System.in);
int k=scanner.nextInt();
if(n<k){System.out.println("输入错误!");return;}
else{
long number1=0;
long number2=0;
number1=calculateN(n)/(calculateN(k-1)*calculateN(n+1-k));
number2=calculateN(n)/(calculateN(k)*calculateN(n-k));
System.out.println("C(n+1,k) = :"+(number1+number2));
}
}
public static long calculateN(int n) {
if(n==1 || n==0){
return 1;
}
return n*calculateN(n-1);
}
}
程序截图
二、使用递归的方法使用组合数递推公式计算
设计思想
(1)输入n
(2)判断n是不是负数
(3)递归计算出结果
源代码
//三、使用递归的方法使用组合数递推公式计算
//计算从1加到n
import java.math.BigInteger;
import java.util.Scanner;
public class Zuoye01 {
public static void main(String[] args) {
System.out.print("请输入N:");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
if(n<0){System.out.println("输入错误!");return;}
else{
long number1=0;
number1=n+calculateN(n-1);
System.out.println("1+2+...+"+n+":="+number1);
}
}
public static long calculateN(int n) {
if(n==1 || n==0){
return 1;
}
return n*calculateN(n-1);
}
}
程序截图
作业二
//汉诺塔
一、设计思想
(1)用户输入个数
(2)使用递归将A上n-1个移动到B上,C为过度
(3)将A上最后一个移动到C
(4)递归将B上n-1个移动到C,A为过度
二、流程图
三、源代码
public class Hanoi {
//使用递归法求解含有n个不同大小盘子的汉诺塔移动路径,参数n为盘子数,把A塔上盘子全部移动到C塔上,B为过渡塔
public static void recursionHanoi(int n,char A,char B,char C){
if(n == 1){
System.out.print(A+"——>"+C+" ");
}
else{
recursionHanoi(n-1,A,C,B); //使用递归先把A塔最上面的n-1个盘子移动到B塔上,C为过渡塔
System.out.print(A+"——>"+C+" "); //把A塔中底下最大的圆盘,移动到C塔上
recursionHanoi(n-1,B,A,C); //使用递归把B塔上n-1个盘子移动到C塔上,A为过渡塔
}
}
public static void main(String[] args){
System.out.println("请输入盘子总数n:");
Scanner in = new Scanner(System.in);
int n = in.nextInt();
recursionHanoi(n,'A','B','C');
}
}
四、程序截图
作业三
//判断字符是否是回文数
一、设计思想
(1)输入任意字符串
(2)递归判断字符第一个i和最后一个j是否相同
(3)i++,j--,直到i和j相等或i>j
(4)相同就输出true
二、流程图
一、源代码
import java.util.Scanner;
public class Zuoye03 {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
String str=in.nextLine();
int i=0;
int j=str.length()-1;
System.out.println(str+"是否是回文数?"+Zuoye03.Palindrome(str, i, j));
}
public static boolean Palindrome(String s,int i,int j){
if(i>j){
return true;
}
else if(i==j){
return true;
}
else{
return (s.charAt(i)==s.charAt(j)&&Palindrome(s,i+1,j-1)); //递归
}
}
}
二、程序截图