2015-04-13 3 views
3

Я пытаюсь подсчитать количество рулонов кости до достижения определенного значения стопа. Например, я хочу, конечное значение как 100. Я пишу следующий код:Количество кубиков до достижения значения стоп

sumofsides <- function(stopvalue) { 
    totalsum <- 0 
    while (totalsum < stopvalue) { 
    face <- sample(6, 1, replace= TRUE) 
    totalsum <- totalsum + face 
    } 
    return(total value) 
} 

sumofsides(100) 
[1] 103 

Когда я пишу следующий код, чтобы получить число прокатки, пока она не достигает значения стоп. Но это всегда дает значение 1, что неверно.

numofrolls <- function(stopvalue) { 
    totalsum <- 0 
    while (totalsum < stopvalue) { 
    face <- sample(6, 1, replace= TRUE) 
    totalsum <- totalsum + face 
    } 
    return(length(face)) 
} 

numofrolls(100) 
[1] 1 

Любая помощь приветствуется.

+0

Кроме того, вам не нужен 'заменить = true' аргумент в вызове' sample'. Вы выполняете совершенно новый вызов 'sample' каждой итерации для вашего цикла. –

ответ

3

В вашем текущем цикле вы переписываете totalsum каждую итерацию с новым значением, поэтому ее длина никогда не будет превышать одну. Одним из решений было бы использовать вторую переменную для подсчета количества рулонов:

rollUntil <- function(n) { 
     nRolls <- 0 
     sumRolls <- 0 
     while (sumRolls <= n) { 
       sumRolls <- sumRolls + sample.int(6, 1) 
       nRolls = nRolls + 1 
     } 
     return(nRolls) 
} 


# let's look at the distribution of rolls till 100: 
hist(replicate(1000,rollUntil(100))) 

enter image description here

Смежные вопросы