鱼C论坛

 找回密码
 立即注册
查看: 1058|回复: 1

数据结构编程题

[复制链接]
发表于 2022-6-21 23:34:11 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
银行排队模拟。下表所示,为14名用户到达的时间和办理业务预计消耗的时间。
序号到达时间办理时间序号到达时间办理时间
1       9:00       8min       8         9:24     15min
2      9:00        3min       9         9:35     43min
3      9:03        18min     10        9:39     20min
4      9:05        20min    11         9:40     12min
5      9:06        38min    12        9:41      12min
6      9:10         8min      13        9:45     4min
7      9:20        12min     14        9:45    28min
设计并编写程序,分别求得只有一个窗口办理业务时,最后一名客户离开的时间;有两
个窗口办理业务时,最后一名客户离开的时间;两个窗口办理业务时,如果按业务预计
消耗时间将客户分别安排到两个窗口(20min以内在窗口1办理,20min以上的在窗口
2办理),最后一名客户离开的时间。用code block编写,c语言版。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-25 12:33:27 From FishC Mobile | 显示全部楼层
  1. #include <iostream>
  2. #include <vector>
  3. #include <utility>

  4. using namespace std;

  5. class Time {
  6.         friend ostream& operator<<(ostream& os, const Time&);

  7.         public:
  8.         int h, m;
  9.         Time();
  10.         Time(int, int);
  11.         inline void add(int);
  12.         bool operator<(const Time& time);
  13.         void operator=(const Time& time);
  14. };

  15. Time::Time(): h(0), m(0) { }
  16. Time::Time(int hour, int minute): h(hour), m(minute) { }

  17. ostream& operator<<(ostream& os, const Time& time) {
  18.         os << time.h << ":" << time.h;
  19.         return os;
  20. }

  21. void Time::add(int minute) {
  22.         m += minute;
  23.         h += m / 60;
  24.         m %= 60;
  25.         h %= 24;
  26. }

  27. bool Time::operator<(const Time& time) {
  28.         if (h < time.h) return true;
  29.         else if (h > time.h) return false;
  30.         return m < time.m;
  31. }

  32. bool operator<(const Time& A, const Time& B) {
  33.         if (A.h < B.h) return true;
  34.         else if (A.h > B.h) return false;
  35.         return A.m < B.m;
  36. }

  37. void Time::operator=(const Time& time) {
  38.         h = time.h;
  39.         m = time.m;
  40. }

  41. Time max(const Time& A, const Time& B) {
  42.         if (A < B) return B;
  43.         return A;
  44. }

  45. Time lastCall(vector<pair<Time, int>> service, bool twoWindows = false) {
  46.         Time last, A, B;
  47.         if (not twoWindows) {
  48.                 for (const auto &[T, m]: service) {
  49.                         if (last < T) last = T;
  50.                         last.add(m);
  51.                 }
  52.         }
  53.         else {
  54.                 for (const auto &[T, m]: service) {
  55.                         if (m <= 20) {
  56.                                 if (A < T) A = T;
  57.                                 A.add(m);
  58.                         }
  59.                         else {
  60.                                 if (B < T) B = T;
  61.                                 B.add(m);
  62.                         }
  63.                 }
  64.                 last = max(A, B);
  65.         }
  66.         return last;
  67. }

  68. int main(void) {
  69.         vector<pair<Time, int>> service {
  70.                 {make_pair(Time(9, 0), 8)},
  71.                 {make_pair(Time(9, 0), 3)},
  72.                 {make_pair(Time(9, 3), 18)},
  73.                 {make_pair(Time(9, 5), 20)},
  74.                 {make_pair(Time(9, 6), 38)},
  75.                 {make_pair(Time(9, 10), 8)},
  76.                 {make_pair(Time(9, 20), 12)},
  77.                 {make_pair(Time(9, 24), 15)},
  78.                 {make_pair(Time(9, 35), 43)},
  79.                 {make_pair(Time(9, 39), 20)},
  80.                 {make_pair(Time(9, 40), 12)},
  81.                 {make_pair(Time(9, 41), 12)},
  82.                 {make_pair(Time(9, 45), 4)},
  83.                 {make_pair(Time(9, 45), 28)},
  84.         };
  85.        
  86.         cout << lastCall(service) << endl;
  87.         cout << lastCall(service, true) << endl;
  88.        
  89.         return 0;
  90. }
复制代码
  1. 13:13
  2. 11:11
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表