从区间中查找特定元素的总和(需要模拟)

Posted

技术标签:

【中文标题】从区间中查找特定元素的总和(需要模拟)【英文标题】:Find the sum of specific elements from an interval (simulation required) 【发布时间】:2021-12-27 10:02:37 【问题描述】:

我想使用 for 循环/while 循环/ifelse(或任何其他方法)进行一些模拟,以获取特定区间的元素总数。如果您能帮助我,请提前感谢您!我一直在为这个问题苦苦挣扎!

第二组五个数的元素和第一组五个数的元素之间的差必须大于1,那么第三组的元素的差也必须大于1五个数字和第二组五个数字的元素,以此类推为以下五个数字组

获取区间的代码:

set.seed(50) 
a=sort(runif(10,0,1)) 
b=sort(runif(30,1,4)) 
total=c(a,b) 

例如,从图中的区间来看,total[1]total[2]total[3]total[4]total[5]是我的前5个数字,那么我接下来的5个数字必须相差大于一个与前 5 个数字相比。因此,接下来的 5 个数字必须是 total[11]total[12]total[13]total[14]total[15]。那么第 11 个数字必须是 total[27],因为 total[27] 是第一个与 total[11] 相比相差超过 1 的元素。

请问有没有办法得到total[1]total[2]total[3]total[4]total[5]total[11]total[12]、... ,total[27],....?无需手动计数

【问题讨论】:

您写道,数字之间的差必须大于 1,但第 5 个数字总共是 0.43765986,第 11 个数字是 1.22237104。差值小于一。还是我错过了什么? 这里可能没有解释清楚。第一组五个数字的第一个元素和第二组 5 个数字的第一个元素的差必须大于 1。所以第一组五个数的第 5 个元素与第二组五个数的第 5 个元素的差必须大于 1。因此,第 5 个数字必须与此处(区间内)的第 15 个元素进行比较,而不是与区间中的第 11 个元素进行比较。第 11 个元素仅与第 1 个元素比较,然后第 12 个元素与第 2 个元素进行比较,依此类推... 我会慢慢消化和学习。谢谢! 【参考方案1】:

这是一个带有for() 循环的解决方案。首先,我们创建一个具有所需行数和列数的数据框。然后,在 for 循环中,我们得到一组五个数字,并将它们与最后一组进行比较。在 for 循环之后,我们只保留感兴趣的数据帧行,例如集合相差一个或多个。

n_rows <- length(total)-4
df <- data.frame(ind= rep(NA, n_rows), keep= rep(FALSE, n_rows))
df$ind[1] <- 1; df$keep[1] <- TRUE
last_ind <- 1

for(i in 2:n_rows)
  set_i <- total[i:(i+4)]
  last_set <- total[last_ind:(last_ind+4)]


  df$ind[i] <- i
  df$keep[i] <- all(set_i - last_set >= 1)
  last_ind <- df$ind[max(which(df$keep))]



df <- df[df$keep, ]

df
   ind keep
1    1 TRUE
11  11 TRUE
27  27 TRUE

【讨论】:

以上是关于从区间中查找特定元素的总和(需要模拟)的主要内容,如果未能解决你的问题,请参考以下文章

查找两个总和为特定值的索引

[CSP-S模拟测试]:小P的单调数列(树状数组+DP)

如何在嵌套的 JS 对象中查找特定属性的总和

获取区间内加权平均值的总和

Codeforces Round #353 (Div. 2) C. Money Transfers

在 Swift 数组中查找元素的总和