Computer >> Máy Tính >  >> Lập trình >> C ++

Mã C ++ để tìm một điểm thỏa mãn các ràng buộc

Giả sử, chúng ta được cho trước hai điểm a =(x1, y1) và b =(x2, y2). Khoảng cách Manhattan giữa hai điểm là dist (a, b) =| x1 - x2 | + | y1 - y2 |. Nếu tọa độ điểm a là (0, 0) và tọa độ điểm b là (x, y), ta phải tìm điểm c sao cho dist (a, c) =dist (a, b) / 2 và dist ( b, c) =dist (a, b) / 2. Nếu một điểm như vậy không có sẵn thì chúng tôi in -1, -1.

Vì vậy, nếu đầu vào là x =13, y =7, thì đầu ra sẽ là 6, 4.

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

if x mod 2 is same as 0 and y mod 2 is same as 0, then:
   print( x / 2, y / 2)
otherwise when (x + y) mod 2 is same as 1, then:
   print(- 1, - 1)
Otherwise,
   print(x / 2, (y + 1) / 2)

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
#define N 100
void solve(int x, int y) {
   if(x % 2 == 0 && y % 2 == 0)
      cout<< x / 2 <<' '<< y / 2 <<endl;
   else if((x + y) % 2 == 1)
      cout<< -1 <<' '<< -1 <<endl;
   else
      cout<< x / 2 <<' '<< (y + 1) / 2 << endl;
}
int main() {
   int x = 13, y = 7 ;
   solve(x, y);
   return 0;
}

Đầu vào

13, 7

Đầu ra

6 4