C跟C++的逻辑是一样的,区别只在于输入和输出不一样。
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
//水房打水问题
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, m; //人数和水龙头数
int* w, * p;
int i, j;
int time = 0;
int next = 0;
int flag = 0;
scanf("%d %d", &n, &m);
w = (int*)malloc(sizeof(int) * n);//每个人的接水量
p = (int*)malloc(sizeof(int) * m); //每个水龙头的当前待接水量
for (i = 0; i < n; i++)
{
scanf("%d", &w[i]);
}
if (n <= m) //水龙头多
{
//找到最大水量即可
time = w[0];
for (i = 1; i < n; i++)
{
if (w[i] > time)
time = w[i];
}
printf("%d", time);
}
else
{
for (i = 0; i < m; i++)
p[i] = w[i];
next = m;
while (1)
{
//判断是否所有人都接完水
flag = 0;
for (i = 0; i < m; i++)
{
//printf("%d ", p[i]);
if (p[i] != 0)
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("%d", time);
return 0;
}
time++;
for (i = 0; i < m; i++)
{
if (p[i] > 0)
p[i]--;
if(p[i]==0 && next < n)
{
p[i] = w[next];
next++;
}
}
}
}
free(p); p = 0;
free(w), w = 0;
return 0;
}