1052第四届程序设计大赛 最优服务
来源:互联网 发布:怎么去掉知乎标题 编辑:程序博客网 时间:2024/06/08 01:29
#include <stdio.h> /*第四届程序设计大赛 最优服务Time Limit:1000MS Memory Limit:65536KTotal Submit:106 Accepted:55Description设有n 个顾客同时等待一项服务。顾客i需要的服务时间为ti 共有 s处可以提供此项服务。应如何安排n 个顾客的服务次序才能使平均等待时间达到最小?平均等待时间是n个顾客等待服务时间的总和除以n。 对于给定的n个顾客需要的服务时间和s的值,编程计算最优服务次序。 Input第一行有 2 个正整数n 和 s (0 < s <= n <= 100),表示有n 个顾客且有 s处可以提供顾客需要的服务。 接下来的1 行中,有n个正整数, 表示n个顾客需要的服务时间。Output输出最小平均等待时间,保留两位小数。Sample Input10 256 12 1 99 1000 234 33 55 99 812思路: 窗口1 窗口2 //小的排前面平均等待时间最少 1 12 33 55 56 99 99 234 812 1000Sample Output336.00Source*/ //对数组进行从小到大排序 (选择排序) void arrpi(int arr[],int n){ int i,j; int temp; for(i=0;i<n-1;i++) { for(j=i;j<n;j++) { if(arr[i]>arr[j]) { temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } }}//数组输入函数 void arrScanf(int arr[],int n){ int i,j; for(i=0;i<n;i++) { scanf("%d",&arr[i]); }}//数组打印函数,打印每个窗口对应的人。有s个窗口 //该函数是用于调试程序 /*输入10 256 12 1 99 1000 234 33 55 99 812输出 窗口1 窗口2 1 12 33 55 56 99 99 234 812 1000*/ void arrPrintf(int arr[],int n,int s){ int i; int t=1; for(i=0;i<n;i++) { printf("%d\t",arr[i]); t++; if(t%(s+1)==0) { printf("\n"); t=1; } }}//将数组全部赋值为0 void arrZero(int arr[],int n){ int i; for(i=0;i<n;i++) { arr[i]=0; }}//计算1-s个窗口中,等待的时间总和 //这部分最复杂 time(int arr[],int n,int s){ int time=0;//定义一个总时间变量 int i; int count;//定义一个计数器,记录人最多的窗口有几个人 int t; if(n%s!=0)//如果每个窗口人数不相同 { int control;//定义一个控制器, 根据窗口排队人数来计算窗口等待的人数 count=n/s+1;//如果每个窗口人数不一样,取整数部分再加一 t=count+1;//这个加一是因为下面定义 if((i+1)%s==1) t--; 刚开始就满足,所以先加一 for(i=0;i<n;i++) { if((i+1)%s>=1&&(i+1)%s<=n%s) control=1;//如果是每个窗口排队人数不一样,多的队伍乘以t else control=0;//少的队伍乘以t-1 if((i+1)%s==1) t--; if(control==1) time+=arr[i]*t; else time+=arr[i]*(t-1); } } else//如果队伍是一个矩阵 { count=n/s; //每个窗口排队人数 t=count+1; //这个加一是因为下面定义 if((i+1)%s==1) t--; 刚开始就满足,所以先加一 for(i=0;i<n;i++) { if((i+1)%s==1) t--; time+=arr[i]*t; //等待的人数乘以时间 } } return time;}int main(void){ int n=0,s=0;//有n个人,s个窗口 int allTime=0;//总时间 double everyTime=0;//每个人的等待时间(平均等待时间) int arr[100];//定义一个数组来记录每个人分别需要的时间 arrZero(arr,100);//将数组中的每一个元素赋值为0 scanf("%d %d",&n,&s); //输入人数和窗口数 arrScanf(arr,n);//将个人分别需要的时间输入数组 arrpi(arr,n);//将数组中的每一个元素从小到大排序 //arrPrintf(arr,n,s);//打印每个窗口等待的人 allTime=time(arr,n,s);//计算总时间 everyTime=1.0*allTime/n;//计算平均时间 printf("%.2lf",everyTime);//输出每个人的平均等待时间 return 0;}
阅读全文
0 0
- 1052第四届程序设计大赛 最优服务
- 第四届程序设计大赛 最优服务
- 第四届河南省程序设计大赛
- 河南省第四届程序设计大赛--Substring
- 第四届河南省程序设计大赛 - 部分题解
- 第四届程序设计大赛 序号互换
- nyoj308 Substring(第四届河南省程序设计大赛)
- 1057第四届程序设计大赛 统计数字
- noj 303 序号互换 (第四届河南省程序设计大赛)
- noj 308 Substring (第四届河南省程序设计大赛)
- noj 305 表达式求值 第四届河南省程序设计大赛//待续~~~
- nyoj305表达式求值(第四届河南省程序设计大赛)
- NYOJ 303【序号互换】第四届河南省程序设计大赛
- 第四届河南省程序设计大赛-NYOJ-303-序号互换
- 华中农业大学第四届程序设计大赛网络同步赛题目
- 华中农业大学第四届程序设计大赛网络同步赛 J
- 华中农业大学第四届程序设计大赛F题LCS
- 华中农业大学第四届程序设计大赛网络同步赛 C
- 快速幂&快乘 HDU 5187
- Q
- DES加密工具类,用于网络参数加密
- 1010. Radix (25)
- TensorFlow学习--卷积神经网络训练CIFAR-10数据集
- 1052第四届程序设计大赛 最优服务
- 乐观锁与悲观锁
- 狄克斯特拉算法
- 快速搭建docker spark+hadoop计算环境
- MySQL事务介绍及原理
- hibernater 复习,总结
- jqGrid框架中如何设置动态展示自定义的列
- shiro 之 Shiro 标签
- 每隔10度输出0度到300度之间的华氏温度到摄氏温度的对照表