Các ngôn ngữ cấp thấp hơn, chẳng hạn như C và C ++ thực sự không có khái niệm về mảng đa chiều. (Khác với vectơ và mảng động) Khi bạn tạo một mảng nhiều chiều với
int foo[5][10];
Đây thực sự chỉ là cú pháp đường . Những gì C thực sự làm là tạo ra một mảng liền kề gồm 5 phần tử 10 * . Điều này
foo[4][2]
cũng là cú pháp đường. Điều này thực sự đề cập đến các yếu tố tại
4 * 10 + 2
hoặc, phần tử thứ 42. Nói chung, chỉ số của phần tử [a][b]
trong mảng foo[x][y]
là tại
a * y + b
Khái niệm tương tự áp dụng cho mảng 3d. Nếu chúng ta có foo[x][y][z]
và chúng ta truy cập phần tử, [a][b][c]
chúng ta thực sự đang truy cập phần tử:
a * y * z + b * z + c
Khái niệm này áp dụng cho mảng n chiều. Nếu chúng ta có một mảng có kích thước D1, D2, D3 ... Dn
và chúng ta truy cập phần tử S1, S2, S3 ... Sn
thì công thức là
(S1 * D2 * D3 ... * Dn) + (S2 * D3 * D4 ... * Dn) + (S3 * D4 ... * Dn) ... + (Sn-1 * Dn) + Sn
Các thách thức
Bạn phải viết một chương trình hoặc hàm tính toán chỉ số của một mảng nhiều chiều theo công thức trên. Đầu vào sẽ là hai mảng. Mảng đầu tiên là kích thước và mảng thứ hai là các chỉ số. Độ dài của hai mảng này sẽ luôn bằng nhau và ít nhất là 1.
Bạn có thể giả định một cách an toàn rằng mọi số trong mảng sẽ là một số nguyên không âm. Bạn cũng có thể giả định rằng bạn sẽ không nhận được một 0
mảng kích thước, mặc dù 0
có thể nằm trong các chỉ số. Bạn cũng có thể cho rằng các chỉ số sẽ không lớn hơn kích thước.
Kiểm tra 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