我是靠谱客的博主 狂野薯片,最近开发中收集的这篇文章主要介绍排队接水,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述

有n个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。

输入输出格式

输入格式:
输入文件共两行,第一行为n;第二行分别表示第1个人到第n个人每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。

输出格式:
输出文件有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。

输入输出样例

输入样例#1:
10
56 12 1 99 1000 234 33 55 99 812
输出样例#1:
3 2 7 8 1 4 9 6 10 5
291.90
说明

n<=1000

ti<=1e6,不保证ti不重复

  题解 :题目的例子已经说明,该题目的做法

贪心

#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct  stu
{
	int num;//排队的序号
	int time;//排队节水的SHI时间
}a[1000];
bool cmp(stu a,stu b)
{
	if(a.time>b.time)
	return false  ;
	return true;
}
int main()
{
  int n;
  double ave,sum;
  cin>>n;
  for(int i=1;i<=n;i++)
  {
  	cin>>a[i].time;
     a[i].num=i;
  }
  sort(a+1,a+n+1,cmp);
  for(int i=1;i<=n;i++)
  {
      printf("%d ",a[i].num);
  	  sum+=a[i].time*(n-i);//后面等待的人 花的总时间
}
   cout<<endl;
     ave=sum/n;
     printf("%.2f",ave);
     return 0;
 }


最后

以上就是狂野薯片为你收集整理的排队接水的全部内容,希望文章能够帮你解决排队接水所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部