7-4 sdut-C 语言实验-排队接水问题
分数 12
全屏浏览
切换布局
作者 马新娟
单位 山东理工大学
山东理工大学有一个水房,有n名同学在一个水龙头前排队接水,假如每名同学接水的时间为Ti,请编程找出这n名同学排队的一种顺序,使得n名同学的平均等待时间最小。
输入格式:
共两行,第一行为n(1≤n≤1000);第二行分别表示第1名同学到第n名同学每人的接水时间T1,T2,…,Tn,每个数据之间有1个空格。
输出格式:
有两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(输出结果精确到小数点后两位)。
输入样例:
在这里给出一组输入。例如:
1. 10 2. 56 12 1 99 1000 234 33 55 99 812
输出样例:
在这里给出相应的输出。例如:
1. 3 2 7 8 1 4 9 6 10 5 2. 291.90
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include<stdio.h> struct node { int b; int num; }a[1000],t; int main() { int n,i,j; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a[i].b); a[i].num=i+1; } for(i=0;i<n-1;i++) { for(j=0;j<n-i-1;j++) { if(a[j].b>a[j+1].b) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } double sum=0; int m=n; for(i=0;i<n;i++) { sum+=a[i].b*(m-1); m--; } sum=sum/n; for(i=0;i<n;i++) { if(i==n-1) { printf("%d\n",a[i].num); } else{ printf("%d ",a[i].num);//max } } printf("%.2f\n",sum); return 0; }