Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

토끼가 상자를 당기는 데 걸리는 총 시간을 찾는 C++ 코드

<시간/>

두 개의 좌표(x1, y1)와 (x2, y2)가 있다고 가정합니다. 토끼가 음식 상자를 당기고 있습니다. 그는 1단위 크기의 로프만 있는 로프로 연결되어 있습니다. 토끼는 같은 방향으로 1단위 이동하기 전에 상자를 서 있는 위치로 당깁니다. 토끼는 상자를 당기지 않고 오른쪽, 왼쪽, 위 또는 아래로 1단위 이동할 수 있습니다. 이 경우 상자에서 정확히 1단위 떨어져 있을 필요는 없습니다. 그가 상자를 다시 당기고 싶다면 상자 옆의 지점으로 가야 합니다. 토끼는 언제든지 시작할 수 있습니다. 어느 방향으로든 1단위를 이동하는 데 1초가 걸립니다. 상자를 시작 위치에서 끝 위치로 이동하는 데 필요한 최소 시간을 찾아야 합니다.

따라서 입력이 x1 =1과 같으면; y1 =1; x2 =2; y2 =2이면 Rabbit이 (2,1) 지점에서 시작할 수 있기 때문에 출력은 4가 됩니다. 상자가 (3,1)에 있는 동안 상자를 (2,1)로 당깁니다. 그런 다음 상자를 당기지 않고 (3,2)로 이동한 다음 (2,2)로 이동합니다. 그런 다음 (2,3)으로 이동하면서 상자를 (2,2)로 당깁니다. 4초가 걸립니다.

단계

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

s := 0
if x1 is not equal to x2 and y1 is not equal to y2, then:
   s := |x2 - x1| + |y2 - y1|
Otherwise
   s := |x2 - x1| + |y2 - y1|
return s

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

#include <bits/stdc++.h>
using namespace std;
int solve(int x1, int y1, int x2, int y2){
   int s = 0;
   if (x1 != x2 && y1 != y2)
      s = abs(x2 - x1) + abs(y2 - y1) + 2;
   else
      s = abs(x2 - x1) + abs(y2 - y1);
   return s;
}
int main(){
   int x1 = 1;
   int y1 = 1;
   int x2 = 2;
   int y2 = 2;
   cout << solve(x1, y1, x2, y2) << endl;
}

입력

1, 1, 2, 2

출력

4