• JAVA


    01.组合数

    (1)

     算法:n!/(n-k)!k!.创建递归算法求N的阶乘。

    设计思想:递归

    源代码:

    //求N!

    import javax.swing.*;

    public class Ncheng {

    public static void main(String args[]) {

    String input1=JOptionPane.showInputDialog("enter the number(下标):");

    int in1=Integer.parseInt(input1);

    String input2=JOptionPane.showInputDialog("enter the number(上标):");

    int in2=Integer.parseInt(input2);

    int out1=jiecheng(in1);

    int out2=jiecheng(in2);

    int out3=jiecheng(in1-in2);

    int out4=out1/(out2*out3);

    JOptionPane.showMessageDialog(null,"N!="+out4,"result:",JOptionPane.CANCEL_OPTION);

    }

    //递归求阶乘

    public static int jiecheng(int n) {

    if(n==1)

    return 1;

    else

    return n*jiecheng(n-1);

    }

    }

     

    结果截图:

     

    (2)

    杨辉三角递推。

    设计思想:循环+二维数组=存杨辉三角塔中的数字。

    源代码:

    //循环+二维数组=组合数

    import java.util.Scanner;

    public class Ncheng3 {

    public static void main(String args[]) {

    Scanner scan=new Scanner(System.in);

    System.out.print("enter the N:");

    int n=scan.nextInt();

    System.out.print("enter the K:");

    int k=scan.nextInt();

    //定义二维数组

    int num[][]=new int[(n+1)][];

    //利用杨辉三角规律  给二维数组存数

        //第一个元素初始化

    num[0]=new int[1];

    num[0][0]=0;

    for(int i=1;i<n+1;i++) {

    //实现二维数组

        num[i]=new int[i+1];

    num[i][0]=1;

    for(int j=1;j<i;j++) {

    num[i][j]=num[i-1][j-1]+num[i-1][j];

    }

    num[i][i]=1;

    }

    System.out.println(""+n+"中选"+k+",有多少种方法:"+num[n][k]);

    }

    }

    结果截图:

    (3)

    用递归实现杨辉三角

    设计思想:自己调用自己,有调用出口。

    源代码:

    //递推实现组合数

    import java.util.Scanner;

    public class Ncheng2 {

    public static void main(String args[]) {

    int n,k,tem;

    System.out.print("n个中选k个,n=");

    Scanner scan=new Scanner(System.in);

    n=scan.nextInt();

    System.out.print("n个中选k个,k=");

    k=scan.nextInt();

    tem=numOf(n,k);

    System.out.println(""+n+"中选"+k+",有多少种方法:"+tem);

    }

    public static int numOf(int n,int k) {

    int x;

    if(n==k)

    return 1;

    else if(k==1)

    return n;

    else

       x=numOf(n-1,k)+numOf(n-1,k-1);

    return x;

    }

    }

     

    结果截图:

    02.汉诺塔-递归

    设计思想:

    (1)n上n-1层放到B柱上

    (2)将第N层放到C柱上

    (3)再将n-1层放到C柱上

    (4)递归调用直到N=1.

    程序流程图:

    原代码:

    import java.util.Scanner;

    public class Hanoi {

    @SuppressWarnings("resource")

    public static void main(String args[]) {

    System.out.print("enter the number of tower:");

    Scanner scan=new Scanner(System.in);

    int in=scan.nextInt();

    System.out.println("Handle:");

    handle(in,'A','B','C');

    }

    //每一步的移动

    //将第n层从A移动到B

    static void move(int n,char A,char B) {

    System.out.println(""+n+""+A+"->"+B);

    }

    //递归处理汉诺塔

    //n层从A借助B移动到C

    static void handle(int n,char A,char B,char C) {

    if(n==1)

    move(1,A,C);

    else {

    handle(n-1,A,C,B);

    move(n,A,C);

    handle(n-1,B,A,C);

    }

    }

    }

    结果截图:

    03.回文

    设计思想:

     

    (1)判断第一个字符和倒数第一个字符是否相同

    (2)是,再判断第二个字符和倒数第二个字符是否相同

    (3)依次判断直到判断中间的字符(判断出口)

    程序流程图:

    源代码:

    import java.util.Scanner;

    //回文

    //递归

    public class Palindrome {

    public static void main(String args[]) {

    System.out.println("enter a string:");

    Scanner scan=new Scanner(System.in);

    String str=scan.next();

    if(handle(str,0,str.length()-1)==1) {

    System.out.println("句子是回文!");

    }

    else

    System.out.println("句子不是回文!");

    }

    //判断

    public static int handle(String ss,int i,int j) {

    int x=0;

    if(i==j||(i+1)==j)

    x=1;

    else {

    if(ss.charAt(i++)==ss.charAt(j--))

    x=handle(ss,i,j);

    }

    return x;

    }

    }

    结果截图:

    ...................................................
  • 相关阅读:
    Assigning to 'id<UINavigationControllerDelegate,UIImagePickerControllerDelegate> _Nullable' from incompatible type 'InfchangeVC *const __strong'
    yum源 epel源 no package available 更换国内yum源
    zabbix安装 报错 socket '/var/lib/mysql/mysql.sock' (13)]
    一步一步超级详细的zabbix安装教程
    二进制、八进制、十进制与十六进制
    Linux面试题2
    uniq命令
    tr命令
    Linux面试题
    Ubuntu 14.04更换内核
  • 原文地址:https://www.cnblogs.com/floakss/p/7663290.html
Copyright © 2020-2023  润新知