课程作业01
1.1使用组合数公式利用n!来计算
设计思想:借助n!来计算n! k! (n-k)!进而求出C(n,k)
程序流程图:
源程序代码:
package zuheshu; import java.util.Scanner; public class zuheshu { public static void diyige() { zuheshu j=new zuheshu(); int b; long d; Scanner in=new Scanner(System.in); System.out.print("请输入N的值:"); int n=in.nextInt(); System.out.print("请输入K的值(K<N):"); int k=in.nextInt(); b=n-k; long i=j.f(n); long a=j.f(k); long c=j.f(b); d=i/a/c; System.out.print("C("+n+","+k+")"+"="+d); } public long f(int n) { if(n==1) { return 1; } return n*f(n-1); } public static void main(String[] args) { // TODO Auto-generated method stub diyige(); } }
结果截图:
1.2使用递推的方法用杨辉三角形计算
设计思想:利用杨辉三角的坐标得出C(n,k)的值
程序流程图:
程序源代码:
import java.util.Scanner; public class dierge { public static int yanghui(int n,int m) { int[][] arr= new int[n+1][n+1]; for(int i=0;i<n+1;i++) { for(int j=i+1;j<n+1;j++) { arr[i][j]=0; } for(int j=0;j<i;j++) { if(j==0) { arr[i][j]=1; } else { arr[i][j]=arr[i-1][j-1]+arr[i-1][j]; } } } return arr[n][m]; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); System.out.printf("请输入N的值:"); int n=in.nextInt(); System.out.printf("请输入K的值:"); int k=in.nextInt(); System.out.println(yanghui(n+1,k)); } }
结果截图:
1.3使用递归的方法用组合数递推公式计算
设计思想:利用对组合数公式进行递归来求出最后的值
程序流程图:
程序源代码:
import java.util.Scanner; public class disange { public static int jiecheng(int m,int n) { if(m<0||n<0||m<n) return 0; if(m==n) return 1; if(n==1) return m; return jiecheng(m-1,n)+jiecheng(m-1,n-1); } public static void main(String[] args) { // TODO Auto-generated method stub System.out.printf("输入N的值:"); Scanner in1=new Scanner(System.in); Scanner in2=new Scanner(System.in); int m=in1.nextInt(); System.out.printf("输入k的值:"); int n=in2.nextInt(); in1.close(); in2.close(); System.out.println("C("+m+","+n+")="+jiecheng(m,n)); } }
结果截图:
2递归编程解决汉诺塔问题。
设计思想:利用中间塔与目标塔的轮换交替来使盘子移动到目标塔 对以上步骤进行递归解决这个问题
程序流程图:
程序源代码:
package hannuota; import java.util.Scanner; public class hannuota { int i=1; public static void move(int n,char qishi,char mubiao) { System.out.println("将"+qishi+"号盘子"+"---->"+mubiao+"号盘子"); } public static void hanoi(int n,char qishi,char jieyong,char mubiao) { if (n==1) move(1,qishi,mubiao); else { hanoi(n-1,qishi,mubiao,jieyong); move(n,qishi,mubiao); hanoi(n-1,jieyong,qishi,mubiao); } } public static void main(String[] args) { // TODO Auto-generated method stub System.out.printf("请输入盘子的个数"); Scanner in=new Scanner(System.in); int n=in.nextInt(); char x='A',y='B',z='C'; System.out.println("盘子移动情况如下:"); hanoi(n,x,y,z); } }
结果截图:
3使用递归方式判断某个字串是否是回文
设计思想:对输入的字符串进行前后元素的对比 若相同则ture不然为false
程序流程图:
程序源代码;
package huiwen; import java.util.Scanner; public class huiwen { public static boolean isHuiWen(String text) { int length = text.length(); for (int i = 0; i < length / 2; i++) { if (text.toCharArray()[i] != text.toCharArray()[length - i - 1]) { return false; } } return true; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); String text = in.next(); System.out.println(isHuiWen(text)); } }
结果截图: