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

Chương trình C ++ để tìm ra tọa độ trung tâm và chiều cao của một tòa nhà

Giả sử, có một tòa nhà có tọa độ tâm xc, yc và chiều cao h. Chúng tôi không biết tọa độ trung tâm của tòa nhà, nhưng chúng tôi được cung cấp n mẩu thông tin chứa tọa độ x, y và giá trị độ cao a. Cao độ của tọa độ (x, y) là cực đại của (h - | x - xc | - | y - yc |, 0). Chúng tôi phải tìm ra tọa độ trung tâm và chiều cao của tòa nhà. Tọa độ xi được cho trong mảng x, yi được cho trong mảng teg y và ai được cho trong mảng a.

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

Tọa độ trung tâm là 3,3 và chiều cao của tòa nhà là 7.

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 -

check := true
for initialize xc := 0, when xc <= 100, update (increase xc by 1), do:
   for initialize yc := 0, when yc <= 100, update (increase yc by 1), do:
      check := true
      mh := 2000000000
      h := -1
      for initialize i := 0, when i < n, update (increase i by 1), do:
         k := |(x[i] - xc) + |y[i] - yc||
         if a[i] is same as 0, then:
            mh := minimum of mh and k
         else:
            if h < 0, then:
               h := a[i] + k
            otherwise when h is not equal to a[i] + k, then:
               check := false
               Come out from the loop
      if h > mh, then:
         check := false
         Ignore following part, skip to the next iteration
      if check is non-zero, then:
         Come out from the loop
      if check is non-zero, then:
Come out from the loop
print(xc, yc, h)

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;

void solve(int n, vector<int> x, vector<int> y, vector<int> a){
   bool check = true;
   int xc, yc, h;
   for (xc = 0; xc <= 100; xc++) {
      for (yc = 0; yc <= 100; yc++) {
         check = true;
         int k, mh = 2e9;
         h = -1;
         for(int i = 0; i < n; i++) {
            k = abs(x[i] - xc) + abs(y[i] - yc);
            if (a[i] == 0) {
               mh = min(mh, k);
            } else {
               if (h < 0) {
                  h = a[i] + k;
               } else if (h != a[i] + k) {
                  check = false;
                  break;
               }
            }
         }
         if (h > mh) {
            check = false;
            continue;
         }
         if (check) {
            break;
         }
      }
      if (check) {
         break;
      }
   }
   cout << xc << " " << yc << " " << h;
}
int main() {
   int n = 3;
   vector<int> x = {3, 3, 2}, y = {4, 2, 3}, a = {6, 6, 6};
   solve(n, x, y, a);
   return 0;
}

Đầu vào

3, {3, 3, 2}, {4, 2, 3}, {6, 6, 6}

Đầu ra

3 3 7