查找最大和最小数字之间的数字,并在该范围内生成随机整数

时间:2016-09-06 16:29:24

标签: matlab

我试图通过在从最小值到最大值的范围内生成随机整数直到找到该数字的匹配来找到在最大值和最小值之间找到整数所需的猜测总数。

例如,当我输入max = 10min = 1然后我选择介于这两个数字之间的5时,我想生成1:10范围内的随机数,直到我找到了5个选择的数量,我们显示了获得该数字的试验计数。我在MATLAB中编写了以下代码,但我不明白为什么它不起作用。

minumber = input('Please enter a minimum value: ');
maxnumber = input('Please enter a maximum value: ');
choicenumber = input('Please enter your choice in this range: ');
randnumber = (maxnumber-minumber).*rand(maxnumber,1) + minumber;
i = 1;

while randnumber(i) ~= choicenumber
      tries(i) = randnumber(i);
      i = i + 1;
end
fprintf('It took %d tries to generate your number', i);

1 个答案:

答案 0 :(得分:0)

我有三条评论:

  1. 如果您的目的是生成随机整数,请不要使用rand。这将生成[0,1]范围内的浮点数,如果您缩放此数字以确认其达到最小和最大范围,则浮点错误将阻止您正确进行相等比较。看看这个规范的Stack Overflow帖子:Why is 24.0000 not equal to 24.0000 in MATLAB?。如果要生成随机整数,请改用randi。实际上,您可以指定要直接生成的最小和最大整数,该整数作为双元素数组输入。

  2. while循环中,您应该在哪里生成数字。您只在while循环之外生成一次数字,只有在第一次尝试生成所需数字时才会退出。否则这将无限期挂起。

  3. tries变量设为标量。你只想积累猜测所需的次数。对randnumber做同样的事情。从我在代码中看到的内容来看,您无需记住每次猜测的历史记录。

  4. 根据上述评论,请改为做这样的事情:

    minumber = input('Please enter a minimum value: ');
    maxnumber = input('Please enter a maximum value: ');
    choicenumber = input('Please enter your choice in this range: ');
    
    randnumber = randi([minumber maxnumber], 1); % Change
    tries = 1; % Change
    
    while randnumber ~= choicenumber
          randnumber = randi([minumber maxnumber], 1); % Regenerate number
          tries = tries + 1; % Change
    end
    fprintf('It took %d tries to generate your number.\n', tries); % Change
    

    我将上面的代码放入一个名为test_random.m的测试脚本中并运行了几次。以下是我使用您所需输入运行的一些示例运行:

    >> test_random
    Please enter a minimum value: 1
    Please enter a maximum value: 10
    Please enter your choice in this range: 5
    It took 4 tries to generate your number.
    >> test_random
    Please enter a minimum value: 1
    Please enter a maximum value: 10
    Please enter your choice in this range: 5
    It took 10 tries to generate your number.
    >> test_random
    Please enter a minimum value: 1
    Please enter a maximum value: 10
    Please enter your choice in this range: 5
    It took 16 tries to generate your number.