ภาษาระดับต่ำกว่าเช่น C และ C ++ จริง ๆ แล้วไม่มีแนวคิดของอาร์เรย์หลายมิติ (นอกเหนือจากเวกเตอร์และอาร์เรย์แบบไดนามิก) เมื่อคุณสร้างอาร์เรย์หลายมิติด้วย
int foo[5][10];
นี้เป็นจริงเพียงแค่น้ำตาลประโยค สิ่งที่ C ทำจริงๆคือสร้างอาเรย์เดี่ยวที่ต่อเนื่องกันขององค์ประกอบ5 * 10 นี้
foo[4][2]
ยังเป็นน้ำตาล syntactic นี่หมายถึงองค์ประกอบที่
4 * 10 + 2
หรือองค์ประกอบที่ 42 โดยทั่วไปดัชนีขององค์ประกอบ[a][b]
ในอาร์เรย์foo[x][y]
อยู่ที่
a * y + b
แนวคิดเดียวกันนี้ใช้กับอาร์เรย์ 3 มิติ ถ้าเรามีfoo[x][y][z]
และเราเข้าถึงองค์ประกอบ[a][b][c]
เราเข้าถึงองค์ประกอบจริงๆ:
a * y * z + b * z + c
แนวคิดนี้ใช้กับอาร์เรย์n -dimensional ถ้าเรามีอาร์เรย์ที่มีมิติ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
int[10]
คือการสร้างอาร์เรย์ที่ต่อเนื่องกันเดียวของห้าองค์ประกอบประเภท