zoukankan      html  css  js  c++  java
  • 将课程作业01、02、03的设计思想、程序流程图、源程序代码和结果截图整理成一篇博文。

    一.使用计算机计算组合数:

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

    1. 设计思想:定义Calculate函数,函数使用递归,用来求一个数的阶乘,然后要求用户输入nk的值,然后利用公式计算出相应的组合数。

    2. 程序流程图:

     3.实验代码

       public static void main(String[] args) {

    // TODO Auto-generated method stub

    System.out.println("求组合数C(n,k):(n为下标)");//用户输入

    System.out.print("请输入n,k:");

    Scanner scan = new Scanner(System.in);

    int n = scan.nextInt();

    int k = scan.nextInt();

    if(n<k)

    System.out.println("ERROR!");

    else if(n==0&&k==0)

    System.out.println("1");

    else

    System.out.print("C("+n+","+k+")="+Calculate(n)/Calculate(k)/Calculate(n-k));

    }

    public static long Calculate(int n) {

    if(n==1)

    {

    return 1;

    }

    return n*Calculate(n-1);

    }

    }

    4. 截图

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

    1. 设计思想:要求用户输入nk,然后如果k=1的话,直接输出n,如果k不等于1的话,调用递归函数求出对应的n,k-1的组合数和n,k的组合数,并且进行相加,输出结果。

    2. 程序流程图

     

    3. 实验代码:

     package homework;import javax.swing.JOptionPane; public class Test3 {

     public static void main(){

            int n,k;

            String s=JOptionPane.showInputDialog("请输入一个正整数作为n");

            n=Integer.parseInt(s);

            String s1=JOptionPane.showInputDialog("请输入一个正整数作为k");

            k=Integer.parseInt(s1);

            JOptionPane.showMessageDialog( null, digui(k,n),"在n个元素中选取k个组合的所有结果数",JOptionPane.INFORMATION_MESSAGE );

        }

        public static long digui(int k,int n){

            long j=0;

            if(k!=1)

                j=digui(k-1,n)+digui(k,n);

            else

                return n;

            return j;

        }

    }

    4. 截图

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

    1. 设计思想:定义一个andsum函数,用来求累计的和,在andsum函数中,当要求的值为1时输出0,是1时输出1,既不是1也不是0时,就递归调用andsum函数,达到叠加的效果。

    2. 实验流程图

             

    3. 实验代码

    package digui;import java.math.BigInteger;import java.util.Scanner;import java.util.*;public class digui {

        public static void main(String[] args){

            System.out.println("输入正整数n");

            Scanner sc=new Scanner(System.in);

            int a=sc.nextInt();

            System.out.println(a+"累加和为:"+andsum(a));   

        }

        public static int  andsum(int a)

        {

             if(a==0) return 0;

            else if(a==1) return 1;

             return a+andsum(a-1);

                 }

    }

    4. 结果截图

    二.递归编程解决汉诺塔问题。用Java实现

    1. 设计思想:首先定义hanoita 函数,函数中递归调用hanoita 函数,先将n-1个盘子从A移到C,再从C移到B。递归,一直到n=1.2. 

    2.实验流程图

    3. 实验代码

    import java.util.Scanner;
    public class hanoita {
    public static int m;
    public static void main(String args[])
    {
    System.out.println("请输入要挪动盘子的个数:");
    Scanner scanner=new Scanner(System.in);//组合数的下标
    int m=scanner.nextInt();
    System.out.println("移动盘子的步骤是:");
    hanoi(m,'A','B','C');
    }
    public static void hanoi(int n,char one,char two,char three)//将n个盘从one座借助two座,移到three座
    {
    if(n==1)
    {
    move(one,three);
    }
    else
    {
    hanoi(n-1,one,three,two);
    move(one,three);
    hanoi(n-1,two,one,three);
    }
    }
    public static void move(char x,char y)
    {
    System.out.println(x+"-->"+y);
    }
    }

    4.实验结果截图

    三.使用递归方式判断某个字串是否是回文( palindrome

    1. 设计思想:定义一个函数,用来返回true或者是false,最先让i=o,jstr.length() - 1public static boolean isPalindrome(String s,int i,int j)函数用来判断是否是回文,反复调用该函数,从第一个和最后一个比较,然后第二个和倒数第二个比较,一直到比较完所有字符。在主函数中要求用户输入字符,然后调用函数判断是否是回文数,并返回相应的truefalse.

    2. 程序流程图:

    3.实验代码

    package dome;

    import java.util.Scanner;

    public class huiwen1 {  

        public static void main(String[] args){  

            System.out.println("请输入字符");

            Scanner s=new Scanner(System.in);  //输入一个字符串

            String str=null;

            str=s.next();

            int i = 0;  

            int j = str.length() - 1;  

            System.out.println(str + " 回文吗?" +isPalindrome(str, i, j));  

        }  

        public static boolean isPalindrome(String s,int i,int j){  

            if(i > j)  

                return false;

            if(i == j)  

                return true;  

            else{  

                return (s.charAt(i) == s.charAt(j)) && isPalindrome(s,i+1,j-1);  

            }  

        }  

    }

    4.截图

      

  • 相关阅读:
    Unity之图片压缩,批量设置,导入自动设置
    Unity之可寻址资源之初始化,下载
    最优二叉树
    独立任务最优调度问题
    石子合并问题
    linux初学笔记
    码农
    用循环打印出多种三角形
    人机猜拳(这是最近的一个总结)
    期末总结
  • 原文地址:https://www.cnblogs.com/zhmbg/p/7663815.html
Copyright © 2011-2022 走看看