R:计算总和小于给定值的三元组
R: Count triplets with sum smaller than a given value
我已经能够在其他语言上找到该问题的多种解决方案,但似乎无法在 R 中找到正确的解决方案。这是我目前所拥有的:
给定一个数组 (-2, 0, 1, 3),求出小于给定总和变量的三元组的个数。
sum = 2
ar<-c(-2, 0, 1, 3);ar
sumtrip<- function (vec,n,sum) {
ctr=0
for (i in 1:n-2){
for (j in i+1:n-1){
for (k in j+1:n){
if ((vec[i]+vec[j]+vec[k]) < sum){
ctr=ctr+1
}
}
}
}
return(ctr)
}
sumtrip(ar,length(ar),sum)
这导致:
vec[i] + vec[j] 中的错误:二元运算符
的非数字参数
你只是标点符号用错了。这应该做你想做的。请将你的括号与我的进行比较。
sum = 2
ar<-c(-2, 0, 1, 3);ar
sumtrip<- function (vec,n,sum) {
ctr=0
for (i in 1:(n-2)){
for (j in (i+1):(n-1)){
for (k in (j+1):n){
if ((vec[i]+vec[j]+vec[k]) < sum){
ctr=ctr+1
}
}
}
}
return(ctr)
}
sumtrip(ar,length(ar),sum)
您可以使用 combn
:
sum(combn(c(-2, 0, 1, 3), 3, function(x) sum(x)<2))
# [1] 2
我已经能够在其他语言上找到该问题的多种解决方案,但似乎无法在 R 中找到正确的解决方案。这是我目前所拥有的:
给定一个数组 (-2, 0, 1, 3),求出小于给定总和变量的三元组的个数。
sum = 2
ar<-c(-2, 0, 1, 3);ar
sumtrip<- function (vec,n,sum) {
ctr=0
for (i in 1:n-2){
for (j in i+1:n-1){
for (k in j+1:n){
if ((vec[i]+vec[j]+vec[k]) < sum){
ctr=ctr+1
}
}
}
}
return(ctr)
}
sumtrip(ar,length(ar),sum)
这导致: vec[i] + vec[j] 中的错误:二元运算符
的非数字参数你只是标点符号用错了。这应该做你想做的。请将你的括号与我的进行比较。
sum = 2
ar<-c(-2, 0, 1, 3);ar
sumtrip<- function (vec,n,sum) {
ctr=0
for (i in 1:(n-2)){
for (j in (i+1):(n-1)){
for (k in (j+1):n){
if ((vec[i]+vec[j]+vec[k]) < sum){
ctr=ctr+1
}
}
}
}
return(ctr)
}
sumtrip(ar,length(ar),sum)
您可以使用 combn
:
sum(combn(c(-2, 0, 1, 3), 3, function(x) sum(x)<2))
# [1] 2