CやC ++などの低レベル言語には、実際には多次元配列の概念がありません。(ベクトルと動的配列以外)で多次元配列を作成する場合
int foo[5][10];
これは実際には単なる構文糖です。Cが実際に行うのは、5 * 10要素の単一の連続した配列を作成することです。この
foo[4][2]
また、構文糖です。これは実際に次の要素を指します
4 * 10 + 2
または、42番目の要素。一般に、要素のインデックス[a][b]
の配列では、foo[x][y]
です
a * y + b
同じ概念が3D配列にも適用されます。foo[x][y][z]
要素があり、要素[a][b][c]
にアクセスする場合、実際に要素にアクセスします。
a * y * z + b * z + c
この概念は、n次元配列に適用されます。次元を持つ配列があり、D1, D2, D3 ... Dn
要素にアクセスする場合S1, S2, S3 ... Sn
、式は
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
チャレンジ
上記の式に従って多次元配列のインデックスを計算するプログラムまたは関数を作成する必要があります。入力は2つの配列になります。最初の配列は次元であり、2番目の配列はインデックスです。これら2つの配列の長さは常に等しく、少なくとも1です。
配列内のすべての数値は負でない整数であると安全に仮定できます。また、インデックスには0
a 0
が含まれている可能性がありますが、次元配列にはaを取得しないと想定できます。また、インデックスが次元よりも大きくないと仮定することもできます。
テストIO
Dimensions: [5, 10]
Indices: [4, 2]
Output: 42
Dimensions: [10, 10, 4, 62, 7]
Indices: [1, 2, 3, 4, 5]
Output: 22167
Dimensions: [5, 1, 10]
Indices: [3, 0, 7]
Output: 37
Dimensions: [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
Indices: [3, 1, 5, 5, 3, 0, 5, 2, 5, 4]
Output: 33570178