【正经题解】接水游戏
2024-02-20 16:48:58
发布于:浙江
137阅读
0回复
0点赞
根据题意
我们要求所有同学都接完水需要多少秒。
那么我们就模拟他们接水的过程
我们可以用一个循环模拟m个水龙头一秒的接水量 (循环一次就是一秒)
当然要到数组
数组下标就是每个水龙头的标号 (1-m)
那么数组的值就是对应的学生对应的接水量
刚开始时1-m个水龙头默认的对应1-m编号学生的接水量
一旦有一个学生接完了 那么就让下一个等待接水的学生来这个水龙头接水
用代码实现的话就是让下个学生对应的接水值赋值这个这个水龙头对应的数组
2.当然上面的代码是套在一个while里的 那么循环的终止条件是什么呢
首先我像大家解释t的初始值为m+1 因为一开始m个学生在接 下一个学生就是m+1
那么循环的终止条件就是(t<=m+n)
因为n个学生都接完水会让t最终加n个1 但t的初始值又是m+1
所以当t=m+n+1时意味着所有学生都接完水了
#include <iostream>
using namespace std;
int s[11000],ans; // 根据t的终止条件来想下s的大小
int main()
{
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++) cin>>s[i]; // 输入每个学生的接水量
int t=m+1; // t用来记录下个学生的编号
while(t<=n+m)
{
for(int i=1;i<=m;i++) // 枚举m个水龙头
{
s[i]--;
if(s[i]==0)
{
s[i]=s[t]; // 如果这个学生的水接完了 模拟换下一个学生来这个水龙头
t++;
}
}
ans++; // 以上是模拟的1秒钟的接水时间 所有ans加一
}
cout<<ans;
return 0;
}
全部评论 1
"'"真""'
正经2024-03-29 来自 广东
1
有帮助,赞一个