题目:

java自动生成一个0到1000000000之间的数,并且自己猜数(知道猜对为止,电脑会告诉你猜大了还是猜小了),并记录猜数次数和猜数的值。

首先我们要创建一个随机数,并且让他作为我们要猜的数。
Random r=new Random(); int x=r.nextInt(1000000000);

想象一下,如果我们猜数,我们不会盲目的猜(如果一直瞎猜也会成功,但是消费的时间和次数是很大的),我们会不停地压缩猜数的范围,例如我们猜的数是21,我们第一次猜的数是40,40比我们猜的数大,我们会在0到40之间猜数,我们第二次猜的数是11,11比我们要猜的数小,所以下次我们猜的数会在11到40之间,如此我们在以后的猜数中会不断压缩范围(边界问题),从而猜到我们的目标数。

我们用xr和xl作为右边界和左边界count作为猜数次数,并且进行初始化(xl=0,xr=1000000000,count=0)。
int xl=0,xr=1000000000,count=0;

我们通过while循环让机器不断进行猜数,每一次猜数都会压缩范围,直到猜到数并且跳出循环。

全部代码如下:
import java.util.Random; public class cai_shu { public static void
main(String[] args) { Random r=new Random(); int x=r.nextInt(1000000000); int
xl=0,xr=1000000000,count=0; System.out.println("要猜的数是"+x); boolean key=true;
while(key) { count++;//加次数 int y=new Random().nextInt(xr);//机器猜的数 if(y<=xl) {
y=xl+new Random().nextInt(xr-xl);//让机器猜的数始终保持在左右边界内。 }
System.out.println("这次猜的数是"+y); if(y==x) {
key=false;//跳出循环,使用break的话,while循环的条件是xr!=xl。 System.out.println("终于猜对了");
}else {//没猜中的话需要压缩范围 if(y>x&&y<=xr) { xr=y; } if(y<x&&y>=xl){ xl=y; } } }
System.out.println("一共猜了"+count+"次"); } }
注意类名要保持一致哦!

经过多次测试,测试结果一般会保持在60次之内(效果很理想!)。

 大功告成,有东西不明白的请在评论区里留言解决。。。。。

thanks everyone!

技术
©2019-2020 Toolsou All rights reserved,
C语言——qsort函数CSS实现溢出显示省略号网络层协议——ICMP协议C语言小游戏-俄罗斯方块Qt入门教程【基础控件篇】QCalendarWidget日历控件用python来控制wifi连接vue中input框只能输入数字Python内置函数C语言数据结构-顺序表删除重复V2.0.0abaqus质量缩放系数取值_ABAQUS的质量缩放