您的位置:首页 > 娱乐 > 八卦 > 苏州谷歌seo_永久免费自助建站推荐_企业网站的基本功能_友情链接查询

苏州谷歌seo_永久免费自助建站推荐_企业网站的基本功能_友情链接查询

2025/1/17 21:34:48 来源:https://blog.csdn.net/2401_86982397/article/details/144386871  浏览:    关键词:苏州谷歌seo_永久免费自助建站推荐_企业网站的基本功能_友情链接查询
苏州谷歌seo_永久免费自助建站推荐_企业网站的基本功能_友情链接查询

#include <iostream>
#include <algorithm>
#include <iomanip>
using namespace std;int main()
{//1. 从标准输入读取人数n,对应题目中在水龙头前排队接水的人数int n;  cin >> n;//2. 定义数组N,用于存储每个人接水的时间,数组大小设定为1000//(可根据实际情况容纳足够多的人,不过实际使用个数由n决定)//这里的N[i]就对应题目中的Ti,表示第i个人的接水时间int N[1000];  for (int i = 0; i < n; i++)cin >> N[i];//3. 定义数组T,用于复制数组N中的元素//目的是对复制后的数组进行排序等操作,同时保持原数组N不变,方便后续查找原始顺序。//本质上,T数组存储的也是每个人的接水时间数据,只是后续会对它进行排序处理来确定排队顺序int T[1000];  for (int i = 0; i < n; i++)T[i] = N[i];//4. 使用标准库中的sort函数对数组T进行排序(从小到大排序)//按照接水时间从小到大排列这些人的顺序//因为按照贪心算法的思想,接水时间短的人先接水可以使总的平均等待时间最短//(sort函数需要包含<algorithm>头文件)//这里传入的参数表示要排序的范围是从T数组的首地址到第n个元素的地址sort(T, T + n);  //5. 定义一个双精度浮点数sum,用于累加计算所有人等待时间的总和,初始化为0//后续会根据确定的排队顺序来计算总的等待时间//最终用它除以人数n得到平均等待时间double sum = 0;  //6. 定义临时数组temp,同样大小为1000//用于辅助后续查找每个人接水时间在原数组中的原始位置等操作,初始时将N数组元素复制过来//这样可以基于这个临时数组去查找每个人最初的序号//(对应题目要求输出的排队顺序是基于最初输入的人员顺序)int temp[1000];  for (int i = 0; i < n; i++)temp[i] = N[i];//7. 开始外层循环,遍历排序后的数组T//以按照接水时间从小到大的顺序确定排队顺序,并计算相应的等待时间以及累加总和for (int i = 0; i < n; i++){//8. 在内层循环中,通过逐个比较查找当前排序后数组T中元素(即当前接水时间)在原数组temp中的原始位置(下标),初始j为0//这个原始位置就对应着最初输入的第几个接水人的序号,找到这个序号才能按要求输出排队顺序int j = 0;  while (temp[j]!= T[i])j++;//9. 找到元素在temp数组中的位置后,将该位置的元素值置为0//避免后续重复查找(标记已处理过),同时这一步也是为了配合查找逻辑的正确性//确保每次都能准确找到下一个未处理的对应元素位置temp[j] = 0;  //10. 输出该元素在原数组中的位置序号(因为数组下标从0开始,所以要加1输出,符合日常计数习惯,也就是输出第几个接水人先接水)//这里输出的顺序就是按照平均等待时间最短的排队顺序来输出的cout << j + 1;  //11. 如果当前不是最后一个元素,就在输出位置序号后添加一个空格用于隔开不同接水人的序号,使输出格式更清晰if (i!= n - 1)cout << " ";  //12. 根据题目要求计算加权总和,权重是(n - i - 1)//表示当前这个人前面有(n - i - 1)个人需要等待他接水//所以每个人的等待时间就是他的接水时间乘以前面等待的人数,这里乘以当前元素值(转换为浮点数类型)累加到sum中//用于后续计算平均等待时间sum += T[i] * (n - i - 1) * 1.0;  }//13. 输出换行符,进行换行操作,使后面输出的平均等待时间与前面排队顺序的输出分行显示cout << '\n';  //14. 使用fixed和setprecision(2)控制输出格式,使得后面输出的平均等待时间保留两位小数//然后输出计算得到的平均等待时间//满足题目要求的第二行输出内容,即输出这种排列方案下的平均等待时间cout << fixed << setprecision(2) << sum / (n * 1.0);  return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com