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
도전
위의 공식에 따라 다차원 배열의 인덱스를 계산하는 프로그램이나 함수를 작성해야합니다. 입력은 두 개의 배열입니다. 첫 번째 배열은 차원이고 두 번째 배열은 인덱스입니다. 이 두 배열의 길이는 항상 같고 1 이상입니다.
배열의 모든 숫자가 음이 아닌 정수라고 가정 할 수 있습니다. 0비록 차원 배열에서 차원 배열을 얻지 못한다고 가정 할 수도 0 있습니다. 인덱스에 수 있습니다. 인덱스가 치수보다 크지 않다고 가정 할 수도 있습니다.
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