21xrx.com
2024-11-22 04:14:29 Friday
登录
文章检索 我的文章 写文章
C++实现排队打水算法
2023-07-13 01:27:58 深夜i     --     --
C++ 排队 打水 算法

排队打水是一种经典的算法问题,C++语言可以很好地实现这个算法。本文将简要介绍C++语言实现排队打水算法的步骤。

排队打水算法是指若干个人排成一列去打水,第i个人需要ti时间才能完成打水任务,问如何安排打水顺序,使得全部人完成打水任务的时间最短。这个问题可以使用贪心算法求解。

具体步骤如下:

1. 将所有人按照ti时间从小到大排序。

2. 计算每个人完成打水任务的时间。

3. 根据计算得到的完成时间排序。

4. 输出排序后的结果。

C++语言实现排队打水算法的代码如下:

#include

#include

using namespace std;

const int maxn = 1e6 + 5;

struct Worker {

  int id;

  int time;

  int total;

  bool operator< (const Worker& a) const {

    if (total != a.total) return total < a.total;

    return id < a.id;

  }

} workers[maxn];

int main() {

  int n;

  cin >> n;

  for (int i = 1; i <= n; i++) {

    cin >> workers[i].time;

    workers[i].id = i;

    workers[i].total = 0;

  }

  sort(workers + 1, workers + 1 + n, [] (Worker& a, Worker& b)

    return a.time < b.time;

  );

  int sum = 0;

  for (int i = 1; i <= n; i++) {

    sum += workers[i].time;

    workers[i].total = sum;

  }

  sort(workers + 1, workers + 1 + n);

  for (int i = 1; i <= n; i++) {

    cout << workers[i].id << " ";

  }

  cout << endl;

  return 0;

}

在代码中,首先输入n表示有n个人需要排队打水,接下来输入n个整数表示每个人完成打水任务需要的时间。然后,按照每个人完成打水任务的时间,从小到大排序。然后,计算每个人完成打水任务的时间。最后,根据计算得到的时间排序,输出结果。

综上所述,C++语言实现排队打水算法的步骤很简单,而且代码也很容易编写和理解。这个算法在很多实际场景中都有用到,是非常实用的算法之一。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复