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

Chương trình C ++ để tìm khoảng cách thời gian nhỏ nhất có thể có giữa hai cặp số đọc đồng hồ

Giả sử chúng ta có một mảng D với N phần tử. Hãy xem xét trong một lễ hội mã có N + 1 người tham gia bao gồm cả Amal. Amal đã kiểm tra và thấy rằng khoảng cách thời gian giữa giờ địa phương ở thành phố của anh ấy và thành phố của người thứ i là D [i] giờ. Khoảng cách thời gian giữa hai thành phố:Đối với hai thành phố A và B bất kỳ, nếu giờ địa phương ở thành phố B là d giờ tại thời điểm giờ địa phương ở thành phố A là 0 giờ, thì khoảng cách thời gian giữa hai thành phố này thành phố tối thiểu là d và 24 d giờ.

Ở đây, chúng tôi đang sử dụng ký hiệu 24 giờ. Sau đó, đối với mỗi cặp hai người được chọn từ N + 1 người, anh ta viết ra khoảng cách thời gian giữa các thành phố của họ. Hãy để khoảng cách thời gian nhỏ nhất trong số chúng là s giờ. Chúng ta phải tìm giá trị lớn nhất có thể của s.

Vì vậy, nếu đầu vào là D =[7, 12, 8], thì đầu ra sẽ là 4, vì khoảng cách thời gian giữa thành phố của người thứ hai và thứ ba là 4 giờ.

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 D
sort the array D
Define an array t
insert 0 at the end of t
for initialize i := 0, when i < n, update (increase i by 1), do:
   if i mod 2 is same as 0, then:
      insert D[i] at the end of t
   Otherwise
      insert 24 - D[i] at the end of t
sort the array t
ans := inf
for initialize i := 1, when i < size of t, update (increase i by 1), do:
   ans := minimum of ans and t[i] - t[i - 1]
return ans

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;
int solve(vector<int> D) {
   int n = D.size();
   sort(D.begin(), D.end());
   vector<int> t;
   t.push_back(0);
   for (int i = 0; i < n; i++){
      if (i % 2 == 0)
         t.push_back(D[i]);
      else
         t.push_back(24 - D[i]);
   }
   sort(t.begin(), t.end());
   int ans = 1e9;
   for (int i = 1; i < t.size(); i++){
      ans = min(ans, t[i] - t[i - 1]);
   }
   return ans;
}
int main(){
   vector<int> D = { 7, 12, 8 };
   cout << solve(D) << endl;
}

Đầu vào

{ 7, 12, 8 }

Đầu ra

4