我如何总结以下顺序:
⌊n∕2⌋ + ⌊n+1∕2⌋ + ⌊n+2∕2⌋ + ...... + (n-1)
我认为丢弃地板并总结每层楼内的东西!! 这只是猜测。
给我任何帮助我总结的提示或通用公式
由于
答案 0 :(得分:2)
由于您要求编程Q& A网站,我必须假设您需要计算答案。这就是......
int sum = 0;
for (int j=0; j<n-1; ++j) {
sum += (n+j)/2;
}
int
将自动截断到发言权。
不那么聪明的答案是这个。让n = 2k
。然后总和变为
k + k + k+1 + k+1 + ... + 2k-1 + 2k-1 = 2(k + k+1 + ... + 2k-1)
你可以使用公式
1 + 2 + ... + a = a(a+1)/2
用一点代数完成它。
答案 1 :(得分:0)
假设n
是偶数,那么floor(n/2) == floor((n+1)/2)
。并floor((n+2)/2) == floor(n/2) + 1
。
拼图中的另一个部分是算术序列之和的表达式,可以找到here。
答案 2 :(得分:0)
你可以做任意范围1..20:
sum = (1..20).inject{|sum, n| sum + (n/2.0).floor}
当然你可以使用任何范围。这个例子是在Ruby中,但你可以在许多语言中做类似的事情 - 算法是相同的。
答案 3 :(得分:0)
只要你没有要求一个聪明的算法或优化,我能想到的最简单的方法就是老的可靠循环。在C#中,一种方法是这样的:
namespace Practice
{
using System;
public class SequenceAggregator
{
public double FirstElement
{
get;
set;
}
public int Length
{
get;
set;
}
public double Calculate()
{
double sum = 0;
for (var i = FirstElement; i < FirstElement + Length; i++)
{
sum += Math.Floor(i / 2);
Console.WriteLine("i={0}, floor(i/2)={1}, sum={1}",
i, Math.Floor(i/2), sum);
}
return sum;
}
}
}
您可以通过以下方式使用此课程:
namespace Practice
{
using System;
class Program
{
static void Main(string[] args)
{
SequenceAggregator a = new SequenceAggregator();
a.FirstElement = 1;
a.Length = 3;
Console.WriteLine("Sum:{0}", a.Calculate());
}
}
}