Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ เพื่อค้นหาช่องว่างเวลาที่เล็กที่สุดที่เป็นไปได้ระหว่างการอ่านค่านาฬิกาสองคู่


สมมติว่าเรามีอาร์เรย์ D ที่มีองค์ประกอบ N พิจารณาในเทศกาลโค้ดที่มีผู้เข้าร่วม N+1 รวมถึง Amal Amal ตรวจสอบและพบว่าช่องว่างเวลาระหว่างเวลาท้องถิ่นในเมืองของเขากับเมืองคนที่ i คือ D[i] ชั่วโมง ช่องว่างเวลาระหว่างสองเมือง:สำหรับสองเมือง A และ B ถ้าเวลาท้องถิ่นในเมือง B คือ d นาฬิกาในขณะที่เวลาท้องถิ่นในเมือง A เป็น 0 นาฬิกา ดังนั้นช่องว่างเวลาระหว่างสองเมืองนี้ เมืองอย่างน้อย d และ 24−d ชั่วโมง

ที่นี่เราใช้สัญกรณ์ 24 ชั่วโมง จากนั้น สำหรับแต่ละคู่ของคนสองคนที่ได้รับเลือกจากคน N+1 เขาเขียนช่องว่างเวลาระหว่างเมืองของพวกเขา ให้ช่องว่างเวลาที่น้อยที่สุดในหมู่พวกเขาเป็นชั่วโมง เราต้องหาค่าสูงสุดของ s ที่เป็นไปได้

ดังนั้น หากอินพุตเป็นเหมือน D =[7, 12, 8] ผลลัพธ์จะเป็น 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