方法课后作业

 1、使用计算机计算组合数

 

(1)使用组合数公式利用n!来计算

源代码

 1 import javax.swing.JOptionPane; 
 2 public class Yang1 {
 3     public static void main(String[] args){
 4         int n,k;
 5         String s=JOptionPane.showInputDialog("请输入一个正整数作为n(n>k):");
 6         n=Integer.parseInt(s);
 7         String s1=JOptionPane.showInputDialog("请输入一个正整数作为k:");
 8         k=Integer.parseInt(s1);
 9         JOptionPane.showMessageDialog( null, zuheshu(k,n),"在n个元素中选取k个组合的所有结果数",JOptionPane.INFORMATION_MESSAGE );
10     }
11     public static long zuheshu(int k,int n){
12         long i;
13         i=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));
14         return i;
15     }
16     public static long jiecheng(int i){
17         long j=1;
18         if(i!=1)
19             j=i*jiecheng(i-1);
20         else
21             i=1;
22         return j;
23     }
24 }

结果截图:

 

(2)使用递推的方法用杨辉三角形计算

源代码:

 1 import javax.swing.JOptionPane;
 2 public class Yang2 {
 3 
 4     public static void main(String[] args) {
 5         String firstnumber=JOptionPane.showInputDialog( "请输入第一个数" );
 6         String secondnumber=JOptionPane.showInputDialog( "请输入第二个数" );
 7         int number1 = Integer.parseInt( firstnumber ); 
 8         int number2 = Integer.parseInt( secondnumber );
 9         int max;
10         int min;
11         if(number1>number2)
12         {
13             min=number2;
14             max=number1;
15         }
16         else
17         {
18             max=number2;
19             min=number1;
20         }
21         int get=crule(max,min);
22         String output="组合数C["+max+"]["+min+"]最终的结果为:";
23         output+=get;
24         JOptionPane.showMessageDialog(null, output,
25                  "结果如下:",
26                  JOptionPane.INFORMATION_MESSAGE );
27 
28     }
29     public static int crule(int number1,int number2){
30         if(number2==0||number2==number1)
31         {    
32              return 1;
33         }
34         else
35         {
36              return crule(number1-1,number2-1)+crule(number1-1,number2);
37         }
38     }
39 
40 }

结果截图:

(3)使用递归的方法用组合数递推公式计算

 

源代码:

 1 import javax.swing.JOptionPane; 
 2 public class Yang3 {
 3     public static void main(){
 4         int n,k;
 5         String s=JOptionPane.showInputDialog("请输入一个正整数作为n");
 6         n=Integer.parseInt(s);
 7         String s1=JOptionPane.showInputDialog("请输入一个正整数作为k");
 8         k=Integer.parseInt(s1);
 9         JOptionPane.showMessageDialog( null, digui(k,n),"在n个元素中选取k个组合的所有结果数",JOptionPane.INFORMATION_MESSAGE );
10     }
11     public static long digui(int k,int n){
12         long j=0;
13         if(k!=1)
14             j=digui(k-1,n)+digui(k,n);
15         else
16             return n;
17         return j;
18     }
19 }

结果截图:

 2、汉诺塔问题

源代码:

 1 // 汉诺塔问题
 2 public class Hanoi
 3 {
 4    // recursively move disks between towers
 5    public static void solveTowers( int disks, int sourcePeg, int destinationPeg, int tempPeg ) //disks:盘子 sourcePeg:来源管 destinationPeg:目标管 tempPeg:暂时管
 6    {
 7 
 8       if ( disks == 1 )
 9       {
10          System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );
11          return;
12       }
13       
14       solveTowers( disks - 1, sourcePeg, tempPeg, destinationPeg );
15 
16       // move last disk from sourcePeg to destinationPeg
17       System.out.printf( "\n%d --> %d", sourcePeg, destinationPeg );
18 
19       // move ( disks - 1 ) disks from tempPeg to destinationPeg
20       solveTowers( disks - 1, tempPeg, destinationPeg, sourcePeg );
21    } 
22 
23    public static void main( String[] args )
24    {
25       int startPeg = 1; // value 1 used to indicate startPeg in output
26       int endPeg = 3; // value 3 used to indicate endPeg in output
27       int tempPeg = 2; // value 2 used to indicate tempPeg in output
28       int totalDisks = 3; // number of disks
29       
30       // initial nonrecursive call: move all disks.
31       solveTowers( totalDisks, startPeg, endPeg, tempPeg );
32    } 
33 } 

结果截图:

解释:

如果柱子标为ABC,要由A搬至C,在只有一个盘子时,就将它直接搬至C,当有两个盘子,就将B当作辅助柱。 

如果盘数超过2个,将最后一个盘子遮起来,就很简单了,每次处理两个盘子,也就是:A->BA ->CB->C这三个步骤,而被遮住的部份,其实就是进入程序的递回处理。

3、使用递归方式判断某个字串是否是回文( palindrome )

源代码:

 1 import javax.swing.JOptionPane;
 2 public class HuiWen {  
 3     
 4     public static void main(String[] args){  
 5         String test=JOptionPane.showInputDialog( "请输入需要判断的字符串:" );
 6         int i = 0;  
 7         int j = test.length() - 1;  
 8         String output1=" ";
 9         if(isPalindrome(test, i, j))
10         {
11             output1="是回文数";
12         }
13         else
14         {
15             output1="不是回文数";
16         }
17         String output= test +output1;
18         JOptionPane.showMessageDialog(null, output,
19                 "结果如下:",
20                 JOptionPane.INFORMATION_MESSAGE );
21          
22     }  
23     //判断是否是回文字符串的方法:
24     public static boolean isPalindrome(String s,int i,int j){  
25         if(i > j)  
26             throw new IllegalArgumentException();  
27         if(i == j)  
28             return true;  
29         else{  
30             return (s.charAt(i) == s.charAt(j)) && isPalindrome(s,i+1,j-1);  
31         }  
32     }  
33       
34 }

结果截图:

 

 

 

 

 

 

posted @ 2016-11-09 15:50  暮光之城管  阅读(188)  评论(0编辑  收藏  举报