面试笔试题

2018TCL通讯:

1.调用Java语言,采用递归调用的方式写出以下业务:

生成100个-100至100范围的随机数,在生成的同时取出最大值和最小值(不需要保存生成的随机数),只需要得到最大值和最小值。

第一步:生成-100至100范围的随机数

  • 方法1:

Math.random()定义和用法

random() 方法可返回介于 0 ~ 1 之间的一个随机数(double型)。

//首先随机生成一个数(0,1)之间
double num1=Math.random();//返回的事double型的数,存放在num1中
//如果num1>0.5,则num*-100,否则num*200,结果是(-100,100)之间的数
double num2=num*(num1>0.5?-100:200);


//上面2步合成一步随机生成一个(-100,100)的数
double num=Math.random()*(num1>0.5?-100:200);
  • 方法2 

Random random=new Random();

random.nextInt(int n);定义和用法

该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

//创建并声明对象random
Random random=new Random();
//通过对象调用nextInt()方法,生成一个随机数[0,n)
int num2=(random.nextInt(200)-100);//[0,200)-100就可以得到[-100.100)区间的数

//合成一步

int num =(new Rondom().nextInt(200)-100);

 第二步:定义最大值、最小值的初始值

  int Min = new Random().nextInt(200) - 100;
  int Max = new Random().nextInt(200) - 100;
  int Temp;//交换

    {
        if(Min>Max) {Temp=Min;Min=Max;Max=Temp;}//限制Min一定比Max小的情况
        System.out.println("最小值初始值为:" + Min);
        System.out.println("最大值初始值为:" + Max);
    }

第三步:使用递归的方式,把问题变成更小的问题解决


    public int FindNum(int num) {

        for (int i = 0; i < 100; i++) {//执行一百次,递归的终止条件

            if (Min >= num) {
                Min = num;
                int newMin = new Random().nextInt(200) - 100;//重新生成一个随机数
                return FindNum(newMin);//这个随机数继续调用FindNum函数
            } else if (Max <= num) {
                Max = num;
                int newMax = new Random().nextInt(200) - 100;
                return FindNum(newMax);
            }
        }
        System.out.println("查找后的最小值为:" + Min);
        System.out.println("查找后的最大值为" + Max);
        return 1;
    }
 

 第三步测试结果:


    public static void main(String[] args) {
        int firstNum = new Random().nextInt(200) - 100;
        new Test().FindNum(firstNum);//第一次传进的参数firstNum
    }

结果不唯一: 

最小值初始值为:10
最大值初始值为:-7
查找后的最小值为:-86
查找后的最大值为93

整体代码:Test.java

import java.util.Random;

public class Test {
    int Min = new Random().nextInt(200) - 100;
    int Max = new Random().nextInt(200) - 100;
    int Temp;

    {//1构造代码块先执行
        if (Min > Max) {//限制Min一定比Max小
            Temp = Min;
            Min = Max;
            Max = Temp;
        }
        System.out.println("最小值初始值为:" + Min);
        System.out.println("最大值初始值为:" + Max);
    }
    //最后调用
    public int FindNum(int num) {

        for (int i = 0; i < 100; i++) {

            if (Min >= num) {
                Min = num;
                return FindNum(new Random().nextInt(200) - 100);
            } else if (Max <= num) {
                Max = num;
                return FindNum(new Random().nextInt(200) - 100);
            }
        }
        System.out.println("查找后的最小值为:" + Min);
        System.out.println("查找后的最大值为" + Max);
        return 1;
    }

//第二执行
    public static void main(String[] args) {
        new Test().FindNum(new Random().nextInt(200) - 100);//第一次传进的参数firstNum
    }

}

 

你可能感兴趣的:(面试笔试编程题)