如何汇总楼层数量?

时间:2012-02-01 23:51:31

标签: algorithm sum floor

我如何总结以下顺序:

⌊n∕2⌋ + ⌊n+1∕2⌋ + ⌊n+2∕2⌋ + ...... + (n-1)

我认为丢弃地板并总结每层楼内的东西!! 这只是猜测。

给我任何帮助我总结的提示或通用公式

由于

4 个答案:

答案 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());
        }
    }
}