所以,我需要在 R 中創建一個函式,它以一個整數作為輸入,S ≥ 1 并回傳最接近 S 的五邊形數作為輸出。我的函式的輸出應該是滿足 |??????? 的五邊形數???? |≤|???????| 對于所有正整數 m。但是,如果我能得到兩個不同的五邊形數字,當整數時,s 就在它們中間。那么它需要哪一個(更大或更小的值)并不重要,就像當 S 是 17 并且最接近 17 的五邊形數是 12 和 22 所以它可以取一個
這是我創建的以下代碼用于找到給定正整數 n 的五邊形數 ????:
P_n=function(n){
x=(3*n^2-n)/2
if(n == 0){
return (0)
}else{
return(x)
}
}
在撰寫了找到 pn 的代碼后,我現在堅持要找到最接近整數 s 的五邊形數。我知道主要思想是使用 2 個 while 回圈,然后獲得最小差異。我不確定這里是否必須使用嵌套函式。
uj5u.com熱心網友回復:
你可以試試下面的代碼
P_n <- Vectorize(function(n) max((3 * n^2 - n) / 2, 0))
k <- floor((1 sqrt(1 24 * x)) / 6)
(n <- k - 1 which.min(abs(P_n(c(k,k 1)) - x)))
示例 1
> x <- 18
> k <- floor((1 sqrt(1 24 * x)) / 6)
> (n <- k - 1 which.min(abs(P_n(c(k,k 1)) - x)))
[1] 4
示例 2
> x <- 17
> k <- floor((1 sqrt(1 24 * x)) / 6)
> (n <- k - 1 which.min(abs(P_n(c(k,k 1)) - x)))
[1] 3
uj5u.com熱心網友回復:
您不需要回圈,只需解決以下問題:
對于輸入 S 找到最小 n 使得: 3n^2-n-2S >= 0
通過這樣做,你得到了你的兩個候選人:
n <- (1 sqrt(1 24 * S)) / 6
p1 <- P_n(floor(n))
p2 <- P_n(ceiling(n))
c(p1, p2)[which.min(c(S - p1, p2 - S))]
如果差異相同,這將更喜歡較低的五邊形數字(因為which.min在數字相同的情況下作業的方式)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/367303.html
上一篇:Github-TA要求我們公開我們的私人回購。我和另一個人一樣分叉了私人回購。公開后分叉狀態被移除
下一篇:單一輸入中的數學運算
