黑马程序员技术交流社区

标题: 求大神指导,前两天老师讲到随机数,我想弄个计数器,不知怎么破, [打印本页]

作者: 梦想家宇仔    时间: 2015-12-20 22:08
标题: 求大神指导,前两天老师讲到随机数,我想弄个计数器,不知怎么破,
/*
思路:
        统计猜?数之间每次猜中需要多少次的概率
步骤:
        1,产生随机数
        2,设置二分法
        3,猜中count+1
        4,设置10次,输出count
        5,再把10换成键盘录入,看输入次数与猜中次数的关系

*/

import java.util.Scanner;
class Test_GuessCount
        public static void main(String[] args) {
                int guessNum= (int)(Math.random() * 100) + 1;                //产生一个随机数
                int count=0;
                int erFenShu=100/2;       
                //产生二分数
                /*
                        第一次  为 50
                                第二次 小了 guessNum为50-100之间   二分数为   75
                                                        第三次        小了 guessNum为75-100之间   二分数为   75
                                                                        大了 guessNum为1-50之间   二分数为   25

                                           大了 guessNum为1-50之间   二分数为   25
                                                        第三次 小了 guessNum为75-100之间   二分数为   75
                                                                   大了 guessNum为1-50之间   二分数为   25

               
               
               
               
                */
                for (int i=1; i<=10;i++ ) {                        //测验10次
                        while (true) {
                                if (guessNum<erFenShu)        {
                                        erFenShu=75;
                                        if(guessNum<erFenShu){
                                                       
                                        }else{
                                       
                                        }

                                        //System.out.println("大了");

                                } else if (guessNum>erFenShu) {
                                        //System.out.println("小了");
                                } else {
                                        //System.out.println("中了");
                                        count++;
                                        break;
                                }

                        }
                }
                System.out.println("共猜中"+count+"次");
        }
}

作者: 18338762337    时间: 2015-12-21 08:20
赞,新技能get.
作者: and2long    时间: 2015-12-21 21:16
我今天刚学了随机数.你这个想法不错,我也试试!
作者: DayBreak    时间: 2015-12-21 21:18
果然大神..
作者: and2long    时间: 2015-12-21 21:46
太复杂了...
作者: 214652440    时间: 2015-12-21 21:52
没懂= =.
if (guessNum<erFenShu)        {
                                        erFenShu=75;
                                        if(guessNum<erFenShu){
                                                        
                                        }else{
                                       
                                        }

                                        //System.out.println("大了");

                                }


不懂
作者: 梦想家宇仔    时间: 2015-12-23 15:57
214652440 发表于 2015-12-21 21:52
没懂= =.
if (guessNum

嗯,就是用二分查找,第一次用50比较,第二次用75或25 比较,之后的以此类推
作者: 孤独成瘾    时间: 2016-1-1 20:51
梦想家宇仔 发表于 2015-12-20 22:08
/*
思路:
        统计猜?数之间每次猜中需要多少次的概率

这个想法不错,666,大神有没有!!!
作者: Accoss-x    时间: 2016-1-1 22:12
直接自己输入就完事!
作者: 549208564    时间: 2016-1-2 12:48
如果你是想让程序循环查找,并自动猜中这个数的话,你的erFenShu值在每一次循环判断时都除2,最后可以猜中这个数,思路是这样,我没试,可以试一下
作者: 549208564    时间: 2016-1-2 12:55
加一点, erFenShu的值在循环中不能定义为常量,让它在循环判断的时候,根据大于还是小于,得到erFenShu=erFenShu/2,这样每次循环的值都会折半,或erFenShu+=erFenShu/2这样每次循环的值都会得到50+(50/2)的值,当小于是,这个也要进行判断,可以按这个思路做出来,在进行改进就可以了
作者: 549208564    时间: 2016-1-2 23:44

代码在这,还有一个,当随机数与传入的数相差是一时,用判断去判断,我没判断,这个题还可以,就写的时候思路乱,又记不清老师怎么讲的了,写了好久才搞清楚。。。

package Switch;

public class MY_Math_Rundem {

/*
思路:
        统计猜?数之间每次猜中需要多少次的概率
步骤:
        1,产生随机数
        2,设置二分法
        3,猜中count+1
        4,设置10次,输出count
        5,再把10换成键盘录入,看输入次数与猜中次数的关系

*/
               

        public static void main(String[] args) {
                int guessNum= (int)(Math.random() * 100) + 1;                //产生一个随机数
                int count=0;
                int erFenShu=100/2;
                     
                //产生二分数
                /*
                        第一次  为 50
                                第二次 小了 guessNum为50-100之间   二分数为   75
                                                        第三次        小了 guessNum为75-100之间   二分数为   75
                                                                        大了 guessNum为1-50之间   二分数为   25

                                           大了 guessNum为1-50之间   二分数为   25
                                                        第三次 小了 guessNum为75-100之间   二分数为   75
                                                                   大了 guessNum为1-50之间   二分数为   25               
                */
                System.out.println(guessNum);
                int max=erFenShu;
                       //测验10次
                if (erFenShu<guessNum){
                      for(int i=0;i<10;i++){
                           if (erFenShu<guessNum) {
                                   System.out.println(erFenShu+"小了");
                                   max=max/2;
                                   erFenShu+=max;
                           }else if(erFenShu>guessNum){
                                   System.out.println(erFenShu+"大了");
                                   max=max/2;
                                   erFenShu-=max;
                           }else {
                                   System.out.println(erFenShu+"中了");
                                   count++;
                           }
                       }
                } else if (erFenShu>guessNum) {
                           for(int i=0;i<10;i++){
                           if (erFenShu<guessNum) {
                                   System.out.println(erFenShu+"小了");
                                   max=max/2;
                                   erFenShu+=max;
                           }else if(erFenShu>guessNum){
                                   System.out.println(erFenShu+"大了");
                                   max=max/2;
                                   erFenShu-=max;
                           }else {
                                   System.out.println(erFenShu+"中了");
                                   count++;
                           }
                       }
                } else {
                                      System.out.println(erFenShu+"中了");
                            count++;
               }
                System.out.println("共猜了"+count+"次");
        }
}

作者: 549208564    时间: 2016-1-3 01:29
上面的代码问题解决


public class MY_Math_Rundem2 {

/*
思路:
        统计猜?数之间每次猜中需要多少次的概率
步骤:
        1,产生随机数
        2,设置二分法
        3,猜中count+1
        4,设置10次,输出count
        5,再把10换成键盘录入,看输入次数与猜中次数的关系

*/
               

        public static void main(String[] args) {
                int guessNum= (int)(Math.random() * 100) + 1;                //产生一个随机数
                int count=0;
                //产生二分数
                /*
                        第一次  为 50
                                第二次 小了 guessNum为50-100之间   二分数为   75
                                                        第三次        小了 guessNum为75-100之间   二分数为   75
                                                                        大了 guessNum为1-50之间   二分数为   25

                                           大了 guessNum为1-50之间   二分数为   25
                                                        第三次 小了 guessNum为75-100之间   二分数为   75
                                                                   大了 guessNum为1-50之间   二分数为   25               
                */
                System.out.println(guessNum);
                /*
                 *使用二分查找
                 *设置一个最大数,一个最小数,取中值
                 *使用中值进行判断,如果中值大于随机数,那么最大值等于中值
                 *                        用最大值减去最小值,得到两个值的差,除以2得到二分数,使用 中值减去二分数,得到新中值
                 *        如果中值小于随机数,那么最小值等于中值
                 *                        用最大值减去最小值,得到两个值的差,除以2得到二分数,使用中值加上二分数,得到新中值
                 * */
               int max=100;
               int erFenShu=max/2;
               int mas=0;
                       //测验10次        
                for(int i=0;i<10;i++){
                         
                           if (erFenShu<guessNum) {
                                   System.out.println(erFenShu+"小了");
                                   mas=erFenShu;
                                   erFenShu+=(max-mas)/2;
                                  
                           }else if(erFenShu>guessNum){
                                   System.out.println(erFenShu+"大了");
                                   max=erFenShu;
                                   erFenShu-=(max-mas)/2;
                           }else {
                                   System.out.println(max+"中了");
                                   count++;
                           }
                       }
  
                System.out.println("共猜了"+count+"次");
        }
}
作者: Manli123    时间: 2016-1-3 16:43
真是学习了
作者: tang9137    时间: 2016-1-3 22:48
你的代码太牛了 完全不懂您老要干嘛




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2