ans要用double;
不要用int,在求平均值的时候再转double
错误代码:
#include<bits/stdc++.h>
using namespace std;
int n,ans;
struct node
{
int num,val;
node() : val(0) { static int i=0; num=i++; }
friend bool operator<(const node& a,const node& b)
{
return a.val<b.val;
}
friend istream& operator>>(istream& in,node& n)
{
in>>n.val;
return in;
}
}a[1005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
cout<<a[i].num<<" ",ans+=a[i].val*(n-i);
cout<<endl<<fixed<<setprecision(2)<<double(ans)/n;
return 0;
}
AC代码:
#include<bits/stdc++.h>
using namespace std;
int n;
double ans;
struct node
{
int num,val;
node() : val(0) { static int i=0; num=i++; }
friend bool operator<(const node& a,const node& b)
{
return a.val<b.val;
}
friend istream& operator>>(istream& in,node& n)
{
in>>n.val;
return in;
}
}a[1005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
cout<<a[i].num<<" ",ans+=a[i].val*(n-i);
cout<<endl<<fixed<<setprecision(2)<<ans/n;
return 0;
}