课程作业1

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

a.设计思想

定义n和k,用递归函数表示出N!的阶乘结果,c(n,k)=n!/(k!(n-k)!);调用函数求出c(n,k)的结果

b.源代码

package kecheng1;
import java.util.Scanner;
public class Test
{
    public static void main(String[] args) 
    {
        System.out.print("请输入N:");
        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        System.out.print("请输入:k") ;
        int k=s.nextInt();
        System.out.println(n+"!="+ca(n));
        double x=ca(n)/(ca(k)*ca(n-k));
        System.out.println(x);
    }
    public static long ca(int n) 
    {
        if(n==1 || n==0)
        {
            return 1;
        }
        
        return n*ca(n-1);
    }//递归函数
}

c.流程图

d.结果截图

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

a.程序设计思想

利用递推的方法和杨辉三角计算出组合数的结果,将输入的变量NK表示为杨辉三角的行和列,利用二位数组具体求出杨辉三角的数值,最后输出需要的组合数的数值

b.源代码

package kechengab;

import java.util.Scanner;
public class Dituiyh 
{
    public static void main(String[] args)
    {
        Scanner put=new Scanner(System.in);
        System.out.println("输入行:");
        int x=put.nextInt();
        System.out.println("输入列:");
        int y=put.nextInt();
        if(y>x)
            System.out.print("输入的数据错误");
        int [][]a=new int[6][6];
        for(int i=0;i<=x;i++)
        {
            for(int s=0;s<=i;s++)
            {
                if(s==i||s==0)
                    
                    a[i][s]=1;
                else
                {
                    a[i][s]=a[i-1][s-1]+a[i-1][s];
                }
            }
        }//利用二维数组杨辉三角的表示
        System.out.println("组合数c(x,y)的值为"+a[x][y]);//输出要求的值
    }

}

c.程序流程图

d.结果截图

3.汉诺塔

a.程序设计思想

调用递归函数,终止条件为参数N=1;移动盘子时,利用两个函数,将盘子移动,利用中间的b柱子作为跳板,递归函数求出具体步骤,引用另一个函数具体输出盘子移动的步骤

b.程序源代码

package hannuota;
import java.util.Scanner;
public class Peg 
{
    static private int n = 0;
    public static void main(String[] args) 
    {
         Scanner in = new Scanner(System.in);
         char one = 'A';
         char three = 'B';
         char  two= 'C';
         System.out.println("输入盘子数");
         int num = in.nextInt();  
         hanni(num,one,three,two);
         in.close();
    }
    private static void move(int num,char start,char end)
    {
         n=n+1;
         System.out.println(n+"步操作盘子从:"+start+"-->"+end);
    }//函数表示出具体的盘子移动的方法
    private static void hanni(int num,char one,char three,char two) 
    {
        if(num==1)
        {
            move(1,one,two);
        }
        else
        {
            hanni(num-1,one,three,two);
            move(num,one,two);                 
            hanni(num-1,three,one,two);
        }
     }//递归的方法求出盘子移动轨迹
 }

c.流程图

d结果截图

4.回文数

a程序设计思想

定义字符串储存想要的验证的字符串,定义一个数组储存,将两个数组首尾进行比较,结束条件为比较到数组的中值处

b.源代码

package huiwen;
 
import java.util.Scanner;
 
public class Dihuiwen
{
    public static void main(String[] args) 
    {
        Scanner put =new Scanner(System.in);
        System.out.println("输入字符串:");
        String a = put.nextLine();//定义字符串
        char[] ch = new char[a.length()];
        for(int i = 0;i<a.length();i++)
        {
            ch[i] = a.charAt(i);
        }//将字符穿赋值给数组
        if(zifu(ch,ch.length)==0)//引用函数体
        {
            System.out.println("该字符串不是回文!");
        }
        else
        {
            System.out.println("该字符串是回文!");
        }//
        put.close(); 
     }
    private static int zifu(char[] c,int i) 
    {
        int size = c.length;
        if(i == size/2)
        {
            return 1;
        }
        if(c[size - i] == c[i-1])
        {
           return zifu(c,i-1);
        }
        else
            return 0;
     } //递归函数判断字符串是否为回文数
}

c.流程图

d.结果截图

 总结

该课程主要练习了递归函数以及随机数的运用,虽然完成了部分课题,但是自我感觉对于随机数的运用,以及对于递归函数掌握还没有到达非常熟练的地步,在以后的练习中,自己还需要对这两方面内容进行更加全面的认识以及掌握。

原文地址:https://www.cnblogs.com/xuzhaoyang/p/7663877.html