课后作业01 组合数
1.设计思想:我们先设计一个函数A(int n)用来求n的阶乘,
然后再设计一个函数B(int n,int k)求组合数,B函数调用
A函数代入组合式公式,极为方便。最后在主函数中进行输入
,调用。
2.程序流程:
第一步 设计一个函数int型A(int n)用来求n的阶乘并返回
第二步 设计一个int型的函数B(int n,int k)用来求组合数,调用A使其简化,最后返回所求的组合数
第三步 在main方法中定义n和k,进行输入赋值
第四步 判断n是否大于k如果n比k小错误提示然后退出
第五步 调用B函数求组合数
3.程序源代码:
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柱子上的盘子移到C
当n=1时我们需把A上的最后一个盘子移到C,但不是的
话我们都要分三步走:
(1)把A上的n-1个盘子借助C移到B
(2)把A上的第n个盘子移到C
(3)把B上的n-1个盘子借助A移到C
2.程序流程:
第一步 设计一个函数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
3程序源代码:
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 回文字符串
1.设计思想:回文字符串类似于回文数,我们可以借助字符串的length,
通过length进行递归运算,比较第n个和第length-n,如果相等就递归下去,
否则返回flase,n从0到第length/2个
2.程序流程:
第一步 设计一个boolean函数用来判断回文数
第二步 递归比较第n个和第length-n个如果相等就继续递归,否则返回flase,n从第一个到第length/2个
第三步 通过main函数输入字符串,调用函数判断
3.程序源代码:
package 回文;
import java.util.*;public class huiwen { public static void huiwenshu(String C) { StringBuffer sb=new StringBuffer(C); sb.reverse(); int cout=0; for(int i=0;i<C.length();i++) {if(C.charAt(i)==sb.charAt(i)) { cout++; } } if(cout==C.length()){System.out.println("该字符串是回文字符串!");} else {System.out.println("该字符串不是回文字符串!");} } public static void main(String args []) { Scanner put=new Scanner(System.in); System.out.println("请输入一个字符串:"); String A,B; A=put.nextLine(); huiwenshu(A); }}
4.程序截图: