0

これは単純な数列の質問です 。2,4,8,16,32,64,128,256これらの数が形成されるような数列の数が2,2(square),2(cube)あります。

今私が追加すると2+4+8 = 1414加算 2,4 および 8 によってのみ取得されます。だから私は14今私の手に持っています。14

例:

2+4+8 = 14
14(some logic) = 2,4,8.
4

5 に答える 5

2

これは簡単です:

2+4+8=14 ... 14+2=16
2+4+8+16=30 ... 30+2=32
2+4+8+16+32=62 ... 62+2=64

したがって、合計に 2 を追加し、ld (バイナリ対数) を計算してから 1 を引くだけで済みます。これにより、合計する必要があるシーケンスの要素数が得られます。

たとえば、PHP の場合:

$target=14;
$count=log($target+2)/log(2)-1;
echo $count;

3 を与えるので、シーケンスの最初の 3 つの要素を追加して 14 を取得する必要があります。

于 2012-02-15T10:09:34.523 に答える
0

次の C# コードを確認してください。

x = 14; // In your case
indices = new List<int>();
for (var i = 31; i >= i; i--)
{
   var pow = Math.Pow(2, i);
   if x - pow >= 0)
   {
       indices.Add(pow);
       x -= pow;
   }
}

indices.Reverse();
于 2012-02-15T10:09:32.630 に答える
0

合同モジュールの 2 乗を使用: 14 mod 2 = 0, 14 mod 4 = 2, 14 mod 8 = 6, 14 mod 16 = 14, 14 mod 32 = 14... この数列の違いは、求める数字2 - 0 = 2, 6 - 2 = 4, 14 - 6 = 8, 14 - 14 = 0, ...

これは p 進表現と呼ばれ、形式的に説明するのは少し難しくなりますが、アルゴリズムのアイデアが得られることを願っています。

于 2012-02-15T10:11:58.223 に答える