排队接水

MIKUMIII 2016-06-24 12:23:13
题目描述
有n个人在一个水龙头前排队接水,假如每个人接水的时间为t[i],请编程找出这n个人排队的一种顺序,使得n个人的平均等待时间最小。
注意:若两个人的等待时间相同,则序号小的优先。
输入格式
第一行为n。
第二行到最后一行中,共有n个整数,
分别表示第一个人到第n个人每人的接水时间t[1],t[2],t[3],t[4],……t[n],每个数据之间有一个空格或换行。
数据范围: 0<n<=900, 0<t<=1000
输出格式
共两行,第一行为一种排队顺序,即1到n的一种排列;第二行为这种排列方案下的平均等待时间(保留到小数点后第二位)。

#include <iostream>
using namespace std;
int n;
int *time1;
int *order;
int bubble()
{
for(int x=0;x<n;x++)
{
for(int y=n-1;y>=x;y--)
{
if(time1[y]<time1[x])
{
swap(time1[x],time1[y]);
swap(order[x],order[y]);
}

}
}
}
main()
{
double aver=0;

cin>>n;
time1=new int[n];
order=new int[n];
for(int i=0;i<n;i++)
{

cin>>time1[i];
order[i]=i+1;

}
bubble();
for(int i=0;i<n-1;i++)
{
cout<<order[i]<<" ";
aver+=time1[i]*(n-i-1);
}

cout<<order[n-1];


aver/=n;

cout<<endl<<aver<<endl;
/*
for(int i=0;i<n;i++)
{
cout<<time1[i]<<" ";

}
*/
}

冒泡写得应该没有错,但是测试出来就是不对,不知道为什么,求指点
...全文
892 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小含同学 2020-04-15
  • 打赏
  • 举报
回复
虽然是2016年的帖子 但是我想说 是因为你的输出格式不对printf("\n%.2f", av);才行
brookmill 2016-06-24
  • 打赏
  • 举报
回复
这种题目,一个是要逐字逐句的理解题目要求,一个是要自己想法测试。我玩ACM的时候,经常在写代码之前先把测试用例写好了。 在公司里也是这样。要理解需求,单元测试。虽说公司有专人的QA,但是自己的代码总是被打回来也不太好意思吧
brookmill 2016-06-24
  • 打赏
  • 举报
回复
随便改的,不知道对不对
int bubble()
{
    for(int x=0;x<n-1;x++)
    {
        for(int y=1;y<n-x;y++)
        {
            if(time1[y]<time1[y-1])
            {
                 swap(time1[y-1],time1[y]);
                swap(order[y-1],order[y]);
            }
 
        }
    }
}
brookmill 2016-06-24
  • 打赏
  • 举报
回复
注意:若两个人的等待时间相同,则序号小的优先。
这说明,你需要一个稳定的排序算法。
http://blog.csdn.net/jiange_zh/article/details/50704604
http://blog.csdn.net/hkx1n/article/details/3922249
一般认为冒泡是稳定的,但你写的这个不是。
试试这个输入
3
2 1 1
再试试这个
3
2 2 1
小灸舞 2016-06-24
  • 打赏
  • 举报
回复
用你的程序跑出来。
假如输入:
4
10 5 7 8
输出:
2 3 4 1
9.25

结果并没有问题啊?
flying_music 2016-06-24
  • 打赏
  • 举报
回复
冒泡排序写错啦

void bubble()
{
    for(int x=0;x<n;x++)
    {
        for(int y=n-1;y>x;y--)
        {
            if(time1[y]<time1[y-1])
            {
                 swap(time1[y-1],time1[y]);
                swap(order[y-1],order[y]);
            }
 
        }
    }
}
MIKUMIII 2016-06-24
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:
用你的程序跑出来。 假如输入: 4 10 5 7 8 输出: 2 3 4 1 9.25 结果并没有问题啊?
但是进提交上去不能过,也不知道为什么

64,674

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧