zoukankan      html  css  js  c++  java
  • 实验二作业

    [ 实验一 ] 计算组合数

         利用阶乘来计算组合数是一种比较简单的方法,先写一个阶乘函数,然后再写组合数公式并调用阶乘函数,计算组合数的值,主函数中输入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( "
    %d --> %d", Peg1, Peg2 );
                 return;
              } 
    
           
              moveDish( disks - 1, Peg1, Peg3, Peg2 );
    
             
              System.out.printf( "
    %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);  
            }  
        }  
          
    }
    

      结果截图:

  • 相关阅读:
    [JS]格式化Date和分析格式化Date字符串的JS代码
    发布一个实用美观的Vista Sidebar Gadget (代表博客园参赛)
    2月8号N706从深圳回湖南,有没有同行的,呵呵
    LiveWriter测试
    自动内容滚动条[WinForm控件]
    关于Ajax的一揽子工程(1)
    “做事先做人”实战
    成熟度即流程
    金秋游故宫
    html块状元素、内联元素
  • 原文地址:https://www.cnblogs.com/cj-125/p/7664080.html
Copyright © 2011-2022 走看看