实验二作业

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 《网络攻防与实践》第十周作业

2017-2018-2 20179205《网络攻防技术与实践》第十周作业 缓冲区溢出攻防研究

作业:实验二

十一假期作业(实验实验二)

实验二作业

第1415教学周作业