实验二作业
Posted 江槐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验二作业相关的知识,希望对你有一定的参考价值。
[ 实验一 ] 计算组合数
利用阶乘来计算组合数是一种比较简单的方法,先写一个阶乘函数,然后再写组合数公式并调用阶乘函数,计算组合数的值,主函数中输入n和k的值即可。
源代码:
import javax.swing.JOptionPane; public class CombinationNumber1 { public static void main(String[] args){ int n,k; String a=JOptionPane.showInputDialog("请输入一个正整数n"); n=Integer.parseInt(a); String b=JOptionPane.showInputDialog("请输入一个正整数k"); k=Integer.parseInt(b); JOptionPane.showMessageDialog( null, combinnum(k,n),"result",JOptionPane.INFORMATION_MESSAGE ); } public static long factorial(int i){ long j=1; if(i!=1) { j=i*factorial(i-1); } else i=1; return j; } public static long combinnum(int k,int n) { long i; i=factorial(n)/(factorial(k)*factorial(n-k)); return i; } }
验证结果:
第二种方法是利用杨辉三角来计算;
第三种方法,利用递归的方法稍微复杂,但是熟悉原理之后也会很容易写出来,递归是一种很方便
import javax.swing.JOptionPane; public class CombinationNumber2 { public static void main(){ int n,k; String a=JOptionPane.showInputDialog("请输入一个正整数n"); n=Integer.parseInt(a); String b=JOptionPane.showInputDialog("请输入一个正整数k"); k=Integer.parseInt(b); JOptionPane.showMessageDialog( null, recursion(k,n),"result",JOptionPane.INFORMATION_MESSAGE ); } public static long recursion(int k,int n) { long i=0; if(k!=1) { i=recursion(k-1,n)+recursion(k,n); } else return n; return i; } }
验证结果:
[ 实验二 ]汉诺塔问题
汉诺塔是递归里的经典问题,通过递归来解决也是最简单的办法,首先需要考虑盘子的个数,柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。 如果盘数超过2个,将最后一个盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->B、A ->C、B->C这三个步骤,而被遮住的部份,也就是进入程序的递归处理。
源代码:
public class HanoiTower { public static void moveDish( int disks, int Peg1, int Peg2, int Peg3 ) { if ( disks == 1 ) { System.out.printf( "\\n%d --> %d", Peg1, Peg2 ); return; } moveDish( disks - 1, Peg1, Peg3, Peg2 ); System.out.printf( "\\n%d --> %d", Peg1, Peg2 ); moveDish( disks - 1, Peg3, Peg2, Peg1 ); } public static void main( String[] args ) { int startPeg = 1; int endPeg = 3; int tempPeg = 2; int totalDisks = 3; moveDish( totalDisks, startPeg, endPeg, tempPeg ); } }
验证结果:
[ 实验三 ]回文字符串
回文字符串就是类似于12321的形式,字符串的第一个和最后一个相同,第二个和倒数第二个相同,这样来实现回文判断。
代码中的test函数是程序的关键,利用test来判断字符串是不是回文形式的,主函数中输入输出并调用函数即可。
import javax.swing.JOptionPane; public class Palindrome { public static void main(String[] args){ String test=JOptionPane.showInputDialog( "请输入字符串:" ); int i = 0; int j = test.length() - 1; if(isPalindrome(test, i, j)) { JOptionPane.showMessageDialog(null, test+"是回文字符串", "result", JOptionPane.INFORMATION_MESSAGE ); } else { JOptionPane.showMessageDialog(null, test+"不是回文字符串", "result", JOptionPane.INFORMATION_MESSAGE ); } } public static boolean isPalindrome(String s,int i,int j){ if(i > j) throw new IllegalArgumentException(); if(i == j) return true; else{ return (s.charAt(i) == s.charAt(j)) && isPalindrome(s,i+1,j-1); } } }
结果截图:
以上是关于实验二作业的主要内容,如果未能解决你的问题,请参考以下文章
2017-2018-2 20179216 《网络攻防与实践》第十周作业