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 := (if sx <= ix, then ix - sx, otherwise 2 * n - ix - sx)
t2 := (if sy <= iy, then iy - sy, otherwise 2 * m - iy - sy)
print(minimum of (t1, t2))

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#include <bits/stdc++.h>
using namespace std;
#define N 100
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