思考问题1

 

编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。

一 思路

 

   1 定义主方法。

   2 定义数组存放随机数。

   3 确定种子。

   4 用随机数公式生成随机数。

   5 输出随机数。

 

二 程序流程图

 

三 源代码

 

   public class random1000 {

   

    public static void main(String[] args){   //主函数

        int[] a=new int[7];                     //定义数组存放随机数

        //Random ran= new Random( System.currentTimeMillis() );

        a[0]=2;                                  //种子

       

        System.out.println("生成的五个随机数是:");

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

           

            a[i]=(7*a[i-1]+7)%1000;      //用随机数公式生成随机数

            System.out.println(a[i]);    //输出

        }

 

    }

 

}

四 程序结果截图

 

                                                                                                                   

 

思考问题2

JDK中System.out.println()方法

Print方法有很多重载的方法。当不传值时会调用println()空参数方法,这个方法里面做了换行操作,这个方法它是有打印数据的,只不过这个是一个换行符。

 

思考问题3

请看以下代码,你发现什么特殊之处了吗?

 

 

square()方法中方法名一样,参数类型不一样。

函数重载体现在(1)方法名相同;(2)参数的个数不同,参数类型不同,参数类型的顺序不同。

 

程序题

一 计算组合数

使用计算机计算组合数有三种方法:

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

     

 

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

 

 

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

1 用递归的方法用组合数递推公式计算

思路

1)定义主方法

2)输入组合数。

3)调用方法求组合数

4)定义求组合数的方法。

5)方法结束的条件。

6)用杨辉三角递归调用自己。

7)输出结果

流程图                                                                                         

 

 

 

 

源代码

import java.util.Scanner;                    

 

public class yanghui3 {

    public static void main(String args[]){    //定义主方法

       

        System.out.println("please input a zuheshu"); //输入组合数

        Scanner in=new Scanner(System.in);

        int n=in.nextInt();

        int k=in.nextInt();

       

if (n < k || n <= 0 || k <= 0) {

            System.out.println("n,k数据输入不合理");

            return;

           }

        System.out.println(digui(n,k));                //调用方法求组合数

    }

 

    public static int digui(int n,int k)           //定义求组合数方法

    {

       

        if(k==0||k==n)                            //方法结束条件

            return 1;

        else

            return digui(n-1,k)+digui(n-1,k-1);  //杨辉三角计算组合数递归调用

    }

}

 

 

程序结果截图

  

2 用组合数公式计算

思路

1)定义主方法

2)输入组合数。

3)调用方法求组合数

4)定义求组合数的方法。

5)方法结束的条件。

6)用杨辉三角递归调用自己。

7)输出结果

流程图                                                                                         

             

 

 

 

源代码

import java.io.*;

public class yanghui {

    public static void main(String args[]) throws IOException //定义主方法

    {

        int n,k,a;

       

        System.out.println("Please input n,k:");        //输入

    BufferedReader read=new BufferedReader(new InputStreamReader(System.in));                        //读入字符串

        String aa=read.readLine();

        String bb=read.readLine();

       

        n=Integer.parseInt(aa);                        //类型转换为整型

        k=Integer.parseInt(bb);

 

 if (n < k || n <= 0 || k <= 0) {

            System.out.println("n,k数据输入不合理");

            return;

           }

 

        

        a=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));

       

        System.out.println("组合数的值是:"+a);     //输出

    }

 

    public static int jiecheng(int n){             //定义求阶乘的方法

        if(n==1||n==0)

            return 1;

        else

            return n*jiecheng(n-1);                 //递归调用

    }

}

 

程序截图

  

 

 

二 汉诺塔题

递归编程汉诺塔问题,用程序实现

 

1 思路

1)        定义主方法

2)        输入盘子个数

3)        调用玩游戏的方法

4)        定义移动一个盘子的方法

5)        定义玩游戏的方法

2流程图

   

 

3源代码

 

import java.util.Scanner;

public class hannuota {

    static int i=0;

    public static void main(String[] args) {        //定义主方法

        // TODO Auto-generated method stub

 

        int n;

       

        System.out.println("Please input n:");  //输入盘子个数

        Scanner in=new Scanner(System.in);

        n=in.nextInt();

        han(n,'a','b','c');               //调用玩游戏的方法

    }

   

    public static void move(char a,int n,char c){     //定义移动一个盘子的方法

        i++;

      System.out.println("第"+i+"步,"+"将第"+n+"个盘子从"+a+"移到"+c);

     

       

    }

   

   public static void han(int n,char a,char b,char c){ //定义玩游戏的方法

   

       if(n==1)                   //盘子是一个的时候把第一个盘子从a移到c;

           move(a,1,c);  

       else

       {

           han(n-1,a,c,b);    //将a上1-n-1的移到b,c过渡

           move(a,n,c);       //将编号为n的从a移到c

           han(n-1,b,a,c);    //将b上1-n-1的移到a,c过渡

 

       }

    }

 

}

 

4 程序截图

 

 

 

三 回文数

1 思路

6)        定义主方法

7)        输入字符串

8)        调用玩游戏的方法

9)        定义移动一个盘子的方法

10)    定义玩游戏的方法

2流程图

 

     

 

3 源代码

import java.util.Scanner;

public class huiwenshu {

 

    public static void main(String[] args) {              //定义主方法

        // TODO Auto-generated method stub

 

        String str="";

        System.out.println("Please input a string:");   //输入字符串

       

        Scanner in=new Scanner(System.in);

       

        str=in.nextLine();

        int len=str.length();                            //求字符串长度

        System.out.println("true is palindrome,false is not:"+pan(str,len-1,0,len)); }

public static boolean pan(String str,int h,int z,int len){ //定义判断是否是回文数的方法

   

 

    if(len==0||len==1)       //函数结束条件

        return true;

   

    if(str.charAt(h)!=str.charAt(z))  //对应的不相等就不是回文数

            return false;

    return  pan(str,h-1,z+1,len-2);  //递归调用

   

}

 

}

4 程序结果截图

 

 

转载于:https://www.cnblogs.com/jingxiaopu/p/5967518.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐