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

두 쌍의 시계 판독값 사이에서 가능한 가장 작은 시간 간격을 찾는 C++ 프로그램

<시간/>

N개의 요소가 있는 배열 D가 있다고 가정합니다. 코드 페스티벌에는 Amal을 포함하여 N+1명의 참가자가 있다고 가정합니다. Amal은 자신이 살고 있는 도시의 현지 시간과 i번째 사람의 도시 사이의 시차가 D[i]시간임을 확인했습니다. 두 도시 사이의 시차:어느 두 도시 A와 B에 대해 도시 A의 현지 시간이 0시인 순간에 도시 B의 현지 시간이 d시라면 이 두 도시 사이의 시차 도시는 최소 d 및 24-d 시간입니다.

여기서는 24시간 표기법을 사용합니다. 그런 다음, N+1명 중에서 선택된 두 사람의 각 쌍에 대해 도시 간의 시차를 기록했습니다. 그 중 가장 작은 시간차를 s시간으로 하자. s의 가능한 최대값을 찾아야 합니다.

따라서 입력이 D =[7, 12, 8]과 같으면 2인칭과 3인칭 도시 간의 시차가 4시간이므로 출력은 4가 됩니다.

단계

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

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

예시

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

#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;
}

입력

{ 7, 12, 8 }

출력

4