2012-02-01 14 views
0

:私が何を考えてどのように階数のシーケンスを合計するには?私は、次の手順合計することができますどのように

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

は床を破棄し、各フロア内で何を合計です! これは単なる推測です。

は私に私がnも、その後、floor(n/2) == floor((n+1)/2)であると仮定すると、それらを

おかげ

+0

nは整数であることが保証されていますか? – ggreiner

+3

それは私によく定義されたシーケンスのようには見えませんが、あなたは生成関数を詳しく説明できますか? – RussS

答えて

0

を合計することができます任意のヒントまたは一般式を与えます。そしてfloor((n+2)/2) == floor(n/2) + 1

パズルのもう1つの部分は、算術シーケンスの合計の式です。これは、hereです。

2

あなたはプログラミングQ &のサイトを頼んでいるので、計算上の回答が必要だと思います。ここに...

int sum = 0; 
for (int j=0; j<n-1; ++j) { 
    sum += (n+j)/2; 
} 

intは自動的に床に切り捨てられます。

あまりスマートなお尻の答えはこれです。 Let 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..20任意の範囲のための

+0

これはかなりスマートです。しかし、n = 2、k = 1、それに1(2/2)+ 1(3/2)+ 2(4/2)+ 2(5/2)というように、 (3/2)= 1 +(4/2)= 2 +だったはずですが、奇数nの場合は補正が必要です(n = 3、k = 1、前と同じです)最初のkをスキップして)。 – Ranty

+0

@Ranty奇数のnの場合は、n = 2k + 1と書いて同じロジックに従います。最初の項と最後の項は2倍にはならないが、中間の項は 'k + 2(k + 1 + ... + 2k-2)+ 2k-1'のようになる。 – PengOne

0

sum = (1..20).inject{|sum, n| sum + (n/2.0).floor} 

そしてもちろん、あなたが任意の範囲を使用することができます。この例はRubyにありますが、多くの言語で同様のことができます - アルゴリズムは同じです。

0

賢明なアルゴリズムや最適化を求めていない限り、私が考えることができる最も簡単なアプローチは、古い信頼できるループです。 C#では、これを実行するための1つの方法は、このようなものになります。

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()); 
     } 
    } 
} 
関連する問題