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

โค้ด C++ หาจำนวนการสแกนหาวัตถุในกริด

สมมติว่าเรามีกริดขนาด m x n วัตถุวางที่เซลล์ (ix, iy) ต้องหาวัตถุโดยสแกนจากตำแหน่งเริ่มต้น (sx, sy) อัลกอริทึมสแกนแถว i และคอลัมน์ j ถ้าอยู่ที่เซลล์ (i, j) ถ้าหาทำเจอหยุด ถ้าไม่เจอเลื่อนไป (i+1, j+1) สแกนต่อ จนกว่าจะเจอ ต้องหาจำนวนครั้งที่สแกน

เช่น ถ้าอินพุตคือ n = 20, m = 20, sx = 3, sy = 2, ix = 12, iy = 4 เอาต์พุตจะเป็น 2

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

t1 := (ถ้า sx <= ix แล้ว ix - sx มิฉะนั้น 2*n - ix - sx)
t2 := (ถ้า sy <= iy แล้ว iy - sy มิฉะนั้น 2*m - iy - sy)
print(min(t1, t2))

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

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

void solve(int n, int m, int sx, int sy, int ix, int iy) {
    int t1 = (sx <= ix ? ix - sx : 2 * n - ix - sx);
    int t2 = (sy <= iy ? iy - sy : 2 * m - iy - sy);
    cout << min(t1, t2);
}

int main() {
    int n = 20, m = 20, sx = 3, sy = 2, ix = 12, iy = 4;
    solve(n, m, sx, sy, ix, iy);
    return 0;
}

อินพุต

20, 20, 3, 2, 12, 4

เอาต์พุต

2