【问题标题】:Program which calculates the sum of the first 10 Fibonacci numbers that are bigger than 1000计算前 10 个大于 1000 的斐波那契数之和的程序
【发布时间】:2019-07-14 11:44:31
【问题描述】:

我想编写一个程序,只打印前 10 个大于 1000 的斐波那契数。

我尝试使用 head, n=10L 但没有成功。

len <- 30
fibvals <- numeric(len)
fibvals[1] <- 1
fibvals[2] <- 1
for (i in 3:len) { 
  fibvals[i] <- fibvals[i-1]+fibvals[i-2]
} 
for (i in 1:length(fibvals)){
  if(fibvals[i] > 1000){print(head(fibvals[i],n=10L))}
}

我预计前 10 个 fibval​​ 会显示,但它一直显示我的 len = 30(所以多出 4 个)

【问题讨论】:

  • fibvals[i] 是一个标量,所以 head(fibvals[i],n=10L) 等于 fibvals[i]
  • 那我怎样才能只显示前 10 个呢?
  • 记录到目前为止您已打印的数量,当您打印到 10 个时停止。
  • 不知道该怎么做,但我会尝试。谢谢!
  • 解决这个问题的几种方法。 sum(fibvals[fibvals &gt; 1000][1:10])。在循环之前启动变量后,将if(fibvals[i] &gt; 1000){fibSum &lt;- fibSum + fibvals[i]; fibIterator &lt;- fibIterator + 1; if(fibIterator = 1) break} 添加到第一个循环。 (fibIterator &lt;- 0; fibSum &lt;- 0)。您的解决方案也可以正常工作。 sum(head(fibval[fibval &gt; 1000], 10)) 也可以。

标签: r printing fibonacci head


【解决方案1】:

另一种使用while循环的方法

#initialisation
m <- matrix( data = c(1,1), nrow = 2 )
n = 10
limit = 1000

#add new row to m,
# until m contains 10 (n) values above 1000 (limit)
while(length(m[ m > limit]) < n ){ 
  m <- rbind( m, m[length(m)] + m[length(m)-1] )
}
#print the values above the limit
print( m[m>limit] )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2013-03-31
    • 1970-01-01
    • 2020-01-18
    相关资源
    最近更新 更多