排队取水:先来先取水

输入数据三行,第一行为人数,第二行表示这些人到来的时刻,第三行表示接水所需时间,输出总的等待时间

img

自己思考

试试这个

```c#

 private static void getTime() {
        int con = 5;
        int[] STime = new int[] {11,14,36,45,67};
        int[] LTime = new int[] {5,3,10,4,9};
        int TimeCon=0;
        int ETime=0;
        for(int i=0;i<STime.length;i++) {
            if(i==0) {
                ETime = STime[i]+LTime[i];
            }else {
                if(STime[i]>=ETime) {
                    ETime=STime[i]+LTime[i];
                }else {
                    TimeCon= TimeCon + ETime-STime[i];
                    ETime=ETime+LTime[i];
                }
            }
        }
        System.out.println("总的等待时间:"+TimeCon);
    }
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/963446575656133.png "#left")

根据题意可以得出下面一些供状态处理的信息
1.其实转换一下可以知道,等待的时间肯定最多是前面人员的接水时间。
2.因为到达时间是已知,所以可以根据到达前的接水状态判断当前到达是否需要等待和等待时间。
3.如果到达时已经有人等待,则前面人等待时间和接收时间是后面人的等待时间。


#include<iostream>
using namespace std;
int main()
{
    int n, sumt=0;
    cin >> n;
    int**p = new int*[2];
    for (int i = 0; i < 2; i++)
        p[i] = new int[n];
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < n; j++)
            cin >> p[i][j];
    }
    for (int i = 0; i < n-1; i++)
    {
        int j = i+1;
        while (j < n)
        {
            int t = p[0][i] + p[1][i]-p[0][j];
            if (t > 0)
                sumt += t;
            else
                break;
            j++;
        }
    }
    cout << sumt << endl;
}

这是一个问题,值得大家学习