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

โค้ด C++ หาจุดกึ่งกลางของกล่องภายใน

สมมติว่าเรามีเมทริกซ์ขนาด n x m เซลล์เป็น 'W' (ขาว) หรือ 'B' (ดำ) มีสี่เหลี่ยมจัตุรัสภายในตารางที่มีความยาวคี่ถูกทาสีดำ เราต้องหาจุดกึ่งกลางของสี่เหลี่ยมนี้

เช่น ถ้าอินพุตเป็นตาราง 5x6 ที่มีบล็อกสีดำ 3x3 ตั้งแต่คอลัมน์ 2-4 และแถว 0-2 เอาต์พุตจะเป็น (3, 1)

ขั้นตอนการแก้ปัญหา

n := จำนวนแถวของเมทริกซ์
m := จำนวนคอลัมน์ของเมทริกซ์
cnt := 0
X := 0
Y := 0
for i := 0 ถึง n-1:
    for j := 0 ถึง m-1:
        if matrix[i, j] == 'B':
            เพิ่ม cnt ขึ้น 1
            X := X + i
            Y := Y + j
X := X / cnt
Y := Y / cnt
return (Y, X)

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

void solve(vector<vector<char>> matrix) {
    int n = matrix.size();
    int m = matrix[0].size();
    int cnt = 0, X = 0, Y = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            if (matrix[i][j] == 'B')
                cnt++, X += i, Y += j;
    }
    X /= cnt;
    Y /= cnt;
    printf("%d, %d\n", Y, X);
}

int main() {
    vector<vector<char>> matrix = { 
        { 'W', 'W', 'B', 'B', 'B', 'W' },
        { 'W', 'W', 'B', 'B', 'B', 'W' },
        { 'W', 'W', 'B', 'B', 'B', 'W' },
        { 'W', 'W', 'W', 'W', 'W', 'W' },
        { 'W', 'W', 'W', 'W', 'W', 'W' }
    };
    solve(matrix);
}

อินพุต

{ { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'B', 'B', 'B', 'W' }, { 'W', 'W', 'W', 'W', 'W', 'W' }, { 'W', 'W', 'W', 'W', 'W', 'W' } }

เอาต์พุต

3, 1