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

Chương trình C ++ để tìm chỉ số của những người lính có thể thành lập đơn vị trinh sát

Giả sử chúng ta có một mảng A với n phần tử. Có n người lính đứng trên một vòng tròn. Đối với người lính thứ i, chiều cao là A [i]. Một đơn vị trinh sát có thể được tạo thành từ hai binh sĩ liền kề như vậy, mà sự khác biệt về chiều cao là tối thiểu. Vì vậy, mỗi người trong số họ sẽ ít được chú ý hơn với cái còn lại. Chúng tôi phải tìm ra chỉ số của cặp binh lính có thể tạo thành một đơn vị trinh sát.

Vì vậy, nếu đầu vào là A =[10, 12, 13, 15, 10], thì đầu ra sẽ là (5, 1).

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 -

n := size of A
D := |A[0] - A[n - 1]|
H := n
for initialize i := 1, when i < n, update (increase i by 1), do:
   if D > |A[i] - A[i - 1]|, then:
      D := |A[i] - A[i - 1]|
      H := i
print H and (H mod n)

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(vector<int> A) {
   int n = A.size();
   int D = abs(A[0] - A[n - 1]);
   int H = n;
   for (int i = 1; i < n; i++) {
      if (D > abs(A[i] - A[i - 1])) {
         D = abs(A[i] - A[i - 1]);
         H = i;
      }
   }
   cout << H << ", " << (H % n) + 1;
}
int main() {
   vector<int> A = { 10, 12, 13, 15, 10 };
   solve(A);
}

Đầu vào

{ 10, 12, 13, 15, 10 }

Đầu ra

5, 1