标签:.com string 通过 辅助 ber oid 递归 div bsp
[ 实验一 ] 计算组合数
利用阶乘来计算组合数是一种比较简单的方法,先写一个阶乘函数,然后再写组合数公式并调用阶乘函数,计算组合数的值,主函数中输入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);
}
}
}
结果截图:




标签:.com string 通过 辅助 ber oid 递归 div bsp
原文地址:http://www.cnblogs.com/cj-125/p/7664080.html