两种近乎一致的算法及代码实现结果不一致
查看原帖
两种近乎一致的算法及代码实现结果不一致
858160
LuShangWu楼主2024/4/21 20:27

正常AC代码

#include"iostream"
#include"cstdio"
#include"algorithm"//为了用sort快排
using namespace std;
struct a
{
    int b,num;//定义结构体a
};
bool cmp(a x,a y)//定义“小于”运算符
{
    return x.b<y.b;
}
int main()
{
    struct a a[1010];//定义结构体数组
    int n,i,j;
    double time=0;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>a[i].b;
        a[i].num=i;//序号存起来
    }
    sort(a+1,a+n+1,cmp);//排序
    for(i=1;i<=n;i++)
    {
        cout<<a[i].num<<" "; //先把简单的做了,输入由小到大的编号
    }
    cout<<endl;//要换行
    for(j=n-1;j>=1;j--) //等待人数的计数器,由n-1开始
    {
        i=n-j;//这是个规律,当前最少时间的人序号和要等待的人数之和=n
        time+=a[i].b*j; //累加
    }
    printf("%.2lf",time/n);//算平均,保留两位小数
    return 0;
}

部分WA代码

// NUDTer2026
//2024/4/21
#include<iostream>
#include<malloc.h>
#include<algorithm>
using namespace std;

typedef struct People{
    int time;
    int index;
}people;
bool cmp(people p1,people p2){
    return p1.time<p2.time;
}

int main()
{
    int n=0;
    cin>>n;
    people* list = new people[1010];
    for(int i = 0;i<n;i++)
    {
        cin>>list[i].time;
        list[i].index = i+1;
    }
    sort(list,list+n,cmp);
    float sum=0;
    for(int i =0;i<n;i++)
    {
        sum+= list[i].time*(n-1-i);
        printf("%d ",list[i].index);
    }
    printf("\n%.2lf",sum/n);
    delete list;
    return 0;
}

/*


 */
2024/4/21 20:27
加载中...