A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
思路:
        统计猜?数之间每次猜中需要多少次的概率
步骤:
        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+"次");
        }
}

14 个回复

倒序浏览
赞,新技能get.
回复 使用道具 举报
我今天刚学了随机数.你这个想法不错,我也试试!
回复 使用道具 举报
果然大神..
回复 使用道具 举报
太复杂了...
回复 使用道具 举报
没懂= =.
if (guessNum<erFenShu)        {
                                        erFenShu=75;
                                        if(guessNum<erFenShu){
                                                        
                                        }else{
                                       
                                        }

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

                                }


不懂
回复 使用道具 举报
214652440 发表于 2015-12-21 21:52
没懂= =.
if (guessNum

嗯,就是用二分查找,第一次用50比较,第二次用75或25 比较,之后的以此类推
回复 使用道具 举报
孤独成瘾 来自手机 中级黑马 2016-1-1 20:51:43
8#
梦想家宇仔 发表于 2015-12-20 22:08
/*
思路:
        统计猜?数之间每次猜中需要多少次的概率

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

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

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+"次");
        }
}
回复 使用道具 举报
上面的代码问题解决


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+"次");
        }
}
回复 使用道具 举报
真是学习了
回复 使用道具 举报
你的代码太牛了 完全不懂您老要干嘛
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马