сколько звезд будет отображаться по следующему алгоритму? - PullRequest
2 голосов
/ 10 октября 2019

Учитывая приведенный ниже код, сколько звездочек ( в среднем ) будет отображаться по следующему алгоритму? Прослеживая первые несколько итераций, я определил, что это будет 99, но другие люди говорят мне, что это должно быть 100. Но почему это должно быть 100, а не 99? Когда nNum равно числам в диапазоне от 1 до 9, у нас есть около 10 звезд, распечатанных для каждого соответствующего сгенерированного случайного числа (9 звезд из случайных чисел от 1 до 9 и еще 1 звезда из 0, сгенерированная какслучайное число для предыдущего nNum, которое привело к nNum--). Но когда nNum = 10, у нас нет той 1 дополнительной звезды из «предыдущего» nNum, которая бы генерировала случайное число 0. (Надеюсь, то, что я здесь говорю, имеет смысл ...!)

public static void main(String[] args)
{
  int nNum = 10;
  printStar(nNum);
}

public static void printStar(int nNum)
{
  if(randNumGen.nextInt(10)<1)
    nNum--;
  if(nNum>0)
  {
    System.out.print('*');
    printStar(nNum);
  }
}

1 Ответ

1 голос
/ 10 октября 2019

Вы уменьшаете значение переменной на основе случайного числа

if(randNumGen.nextInt(10)<1)
    nNum--;

Исходя из этого, вы напечатаете не менее 9 звездочек (при условии, что случайное число всегда генерирует 0). И, с другой стороны, у вас могут быть бесконечные звезды (хотя, вероятностно говоря, это не произойдет из-за семян PRNG)

...