zoukankan      html  css  js  c++  java
  • 简单的 贪心 接水问题

    题目描述
    有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的一种排列;第二行为这种排列方案下的平均等待时间(保留到小数点后第二位)。
    样例输入
    10
    56 12 1 99 1000 234 33 55 99 812
    样例输出
    3 2 7 8 1 4 9 6 10 5
    291.90

    这里遇到了一点问题,就是写程序的  有 报错 而且 比较麻烦的是  看不懂报错  ..下面附上错误提示.

    F:程序asd.cpp(15) : error C2109: subscript requires array or pointer type
    F:程序asd.cpp(15) : error C2228: left of '.s' must have class/struct/union type

    出现这个错误的   原因是   定义了  a的结构体有定义了a的整形.

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct ss
    {
        int s,r;
    }a[1111];
    bool cmp(ss a,ss b)
    {
        return a.s<b.s;  //这是稳定的  排序  因为  他不是 小于等于..
    }
    int main()
    {
        int s,i,j,m,n,b,c;
        double sum;
        while(scanf("%d",&n)!=EOF)
        {
            s=sum=0;
            for(i=1;i<=n;i++)
            {
                scanf("%d",&a[i].s);
                a[i].r=i;
            }
            sort(a,a+n+1,cmp);    //思考一下 不同的 对不同类型的 排序.里面传送们的值不同之处.为什么都是这样传送的.    //知道了  a 是首地址   a+n是尾地址   因为在上面是从  a[1]  开始所以这里需要+1.
            for(i=1;i<n;i++)
            {
                printf("%d ",a[i].r);
                //s=s+a[i].s;
                //sum=sum+s;
            }
            for (int i=1;i<=n;i++)
                sum=sum+a[i].s*(n-i);
            sum=sum/n;
            printf("%d
    %.2lf
    ",a[n].r,sum);
        }
    }
  • 相关阅读:
    css换行和超出隐藏
    [转]ObjectARX SDK 下载全集
    ObjectARX延时动画之定时器简单示意
    ObjectARX延时动画效果简单示意
    ObjectARX选择集快还是遍历块表记录获取实体objectid快?
    ObjectARX插入属性块简单例子
    AcDbRegion面域交集布尔运算简单实例
    wblockCloneObjects从块定义写块到外部文件
    ObjectARX 创建AcDbLeader引线附着块对象实例
    ObjectARX JIG简单示意,实现正交例子
  • 原文地址:https://www.cnblogs.com/A-FM/p/5155753.html
Copyright © 2011-2022 走看看