课程作业1
1使用组合数公式利用n!来计算
a.设计思想
定义n和k,用递归函数表示出N!的阶乘结果,c(n,k)=n!/(k!(n-k)!);调用函数求出c(n,k)的结果
b.源代码
package kecheng1; import java.util.Scanner; public class Test { public static void main(String[] args) { System.out.print("请输入N:"); Scanner s=new Scanner(System.in); int n=s.nextInt(); System.out.print("请输入:k") ; int k=s.nextInt(); System.out.println(n+"!="+ca(n)); double x=ca(n)/(ca(k)*ca(n-k)); System.out.println(x); } public static long ca(int n) { if(n==1 || n==0) { return 1; } return n*ca(n-1); }//递归函数 }
c.流程图
d.结果截图
2.使用递推的方法用杨辉三角形计算
a.程序设计思想
利用递推的方法和杨辉三角计算出组合数的结果,将输入的变量NK表示为杨辉三角的行和列,利用二位数组具体求出杨辉三角的数值,最后输出需要的组合数的数值
b.源代码
package kechengab; import java.util.Scanner; public class Dituiyh { public static void main(String[] args) { Scanner put=new Scanner(System.in); System.out.println("输入行:"); int x=put.nextInt(); System.out.println("输入列:"); int y=put.nextInt(); if(y>x) System.out.print("输入的数据错误"); int [][]a=new int[6][6]; for(int i=0;i<=x;i++) { for(int s=0;s<=i;s++) { if(s==i||s==0) a[i][s]=1; else { a[i][s]=a[i-1][s-1]+a[i-1][s]; } } }//利用二维数组杨辉三角的表示 System.out.println("组合数c(x,y)的值为"+a[x][y]);//输出要求的值 } }
c.程序流程图
d.结果截图
3.汉诺塔
a.程序设计思想
调用递归函数,终止条件为参数N=1;移动盘子时,利用两个函数,将盘子移动,利用中间的b柱子作为跳板,递归函数求出具体步骤,引用另一个函数具体输出盘子移动的步骤
b.程序源代码
package hannuota; import java.util.Scanner; public class Peg { static private int n = 0; public static void main(String[] args) { Scanner in = new Scanner(System.in); char one = 'A'; char three = 'B'; char two= 'C'; System.out.println("输入盘子数"); int num = in.nextInt(); hanni(num,one,three,two); in.close(); } private static void move(int num,char start,char end) { n=n+1; System.out.println(n+"步操作盘子从:"+start+"-->"+end); }//函数表示出具体的盘子移动的方法 private static void hanni(int num,char one,char three,char two) { if(num==1) { move(1,one,two); } else { hanni(num-1,one,three,two); move(num,one,two); hanni(num-1,three,one,two); } }//递归的方法求出盘子移动轨迹 }
c.流程图
d结果截图
4.回文数
a程序设计思想
定义字符串储存想要的验证的字符串,定义一个数组储存,将两个数组首尾进行比较,结束条件为比较到数组的中值处
b.源代码
package huiwen; import java.util.Scanner; public class Dihuiwen { public static void main(String[] args) { Scanner put =new Scanner(System.in); System.out.println("输入字符串:"); String a = put.nextLine();//定义字符串 char[] ch = new char[a.length()]; for(int i = 0;i<a.length();i++) { ch[i] = a.charAt(i); }//将字符穿赋值给数组 if(zifu(ch,ch.length)==0)//引用函数体 { System.out.println("该字符串不是回文!"); } else { System.out.println("该字符串是回文!"); }// put.close(); } private static int zifu(char[] c,int i) { int size = c.length; if(i == size/2) { return 1; } if(c[size - i] == c[i-1]) { return zifu(c,i-1); } else return 0; } //递归函数判断字符串是否为回文数 }
c.流程图
d.结果截图
总结
该课程主要练习了递归函数以及随机数的运用,虽然完成了部分课题,但是自我感觉对于随机数的运用,以及对于递归函数掌握还没有到达非常熟练的地步,在以后的练习中,自己还需要对这两方面内容进行更加全面的认识以及掌握。