Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Magic Squares ในตารางใน C ++


สมมติว่าเรามีกริด เราต้องหาจำนวนตารางย่อยของตารางเวทย์มนตร์ลงในกริดนั้น เมจิกสแควร์คือตารางขนาด 3 x 3 ที่มีตัวเลขตั้งแต่ 1 ถึง 9 ที่แตกต่างกัน ทำให้แต่ละแถว คอลัมน์ และเส้นทแยงมุมทั้งสองมีผลรวมเท่ากัน

ดังนั้นหากอินพุตเป็นแบบ

4 3 8 4
9 5 1 9
2 7 6 2

จากนั้นผลลัพธ์จะเป็น 1 เนื่องจากตารางมายากล

4 3 8
9 5 1
2 7 6

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดหนึ่งชุดที่มีค่า:[816357492, 834159672, 618753294, 672159834,492357816, 438951276, 294753618, 276951438]
  • กำหนดอาร์เรย์ออฟเซ็ตขนาด:9 x 2 :={{-2,-2},{-2,-1},{-2,0},{-1,-2},{-1 ,-1},{-1,0},{0,-2},{0,-1},{0,0}}
  • ตอบ :=0
  • สำหรับการเริ่มต้น i :=2 เมื่อฉัน <จำนวนแถวของกริด อัปเดต (เพิ่ม i ขึ้น 1) ทำ −
    • สำหรับการเริ่มต้น j :=2 เมื่อ j <จำนวนแถวของกริด อัปเดต (เพิ่ม j ขึ้น 1) ทำ −
      • ผลรวม :=0
      • สำหรับการเริ่มต้น k :=0 เมื่อ k <9 อัปเดต (เพิ่ม k ขึ้น 1) ทำ −
        • sum :=sum * 10
        • sum :=sum + grid[i + offset[k, 0], j + offset[k, 1]]
      • ans :=ans + การเกิดขึ้นของผลรวมใน s
  • คืนสินค้า

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

#include ใช้เนมสเปซ std;class Solution {public:int numMagicSquaresInside(vector>&grid) {const unordered_set s{816357492, 834159672, 618753294, 672159834, 492357816, 438951276, 294753618,276951438}; ชดเชย int [][2] ={{-2, -2}, {-2, -1}, {-2, 0},{-1, -2}, {-1, -1}, { -1, 0}, { 0, -2}, { 0, -1}, { 0, 0}}; int ans =0; สำหรับ (int i =2; i> v ={{4,3,8,4},{9,5,1,9},{2,7,6,2}}; ศาล <<(ob.numMagicSquaresInside(v));}

อินพุต

<ก่อน>{{4,3,8,4},{9,5,1,9},{2,7,6,2}}

ผลลัพธ์

1