• 方法课后作业


     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( "
    %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( "
    %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 }

    结果截图:

     

     

  • 相关阅读:
    【全网最优方法】JAVA初学:错误: 找不到或无法加载主类HelloWorld
    Anaconda官网下载太慢/出错,以及Anaconda下载包又慢又出错的总体方法,应该如何快速下载,使用上海科技大学的开源镜像站即可
    认识git的简单命令
    CSS、Bulma介绍
    IDEA问题java: -source 1.6 中不支持diamond、 lambda 表达式
    认识HTML语言(CodePen)
    【Java笔试】对数据库中的分解是否为无损连接和是否保持函数依赖的判定-由牛客网试题引申-保姆式教学
    【大唐杯经验2019】大唐杯全国移动通信大赛 国赛二等奖经验分享
    【Java笔试】OYO校招Java工程师|牛客平台,算法:字符串翻转。附选择题解析
    【Java面试宝典】正则表达式
  • 原文地址:https://www.cnblogs.com/ray-freedom/p/6047265.html
Copyright © 2020-2023  润新知