• 简单的 贪心 接水问题


    题目描述
    有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);
        }
    }
  • 相关阅读:
    win11如何启用IIS管理器应用
    vue 滑块 验证
    将页面dom导出为pdf格式并进行下载
    vue3+vite应用中添加sass预处理器
    Vue2.0与Vue3.0区别总结
    迅为iTOPSTM32MP157开发板重磅发布
    迅为RK3568核心板
    迅为STM32MP157开发板入门教程之外设功能验证
    迅为2K1000开发板龙芯平台Ejtag 单步调试 PMON 的汇编阶段
    迅为2K1000龙芯开发板pmon BSP移植之配置CAN总线
  • 原文地址:https://www.cnblogs.com/A-FM/p/5155753.html
Copyright © 2020-2023  润新知