这里主要想记一下强制类型转换可能也需要浪费时间?
一开始我是把sum定义为 int类型,下面的double s2=(double)sum/n;有两组数据死活跑不过,也不知道为啥,希望路过的大佬能给小弟看看。
方法1:定义两个数组,一个存数据,一个存编号。
#include<bits/stdc++.h>
using namespace std;
int a[1007],b[1007];
int main()
{
int i,j,n;
double sum=0;
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i];
b[i]=i;
}
for(i=1;i<=n-1;i++){
for(j=i+1;j<=n;j++){
if(a[j]<a[i]){
swap(a[j],a[i]);
swap(b[j],b[i]);
}
}
}
for(i=1;i<=n;i++){
cout<<b[i]<<" ";
}
cout<<endl;
for(i=1;i<=n;i++){
sum+=a[i]*(n-i);
}
double s2=sum/n;
cout<<fixed<<setprecision(2)<<s2<<endl;
return 0;
}
方法二:结构体。
#include<bits/stdc++.h>
using namespace std;
struct ti{
int id,value;
}a[1007];
bool cmp(ti a,ti b){
return a.value<b.value;
}
int main()
{
int i,j,n;
double sum=0;
cin>>n;
for(i=1;i<=n;i++){
cin>>a[i].value;
a[i].id = i;
}
sort(a+1,a+1+n,cmp);
for(i=1;i<=n;i++){
cout<<a[i].id<<" ";
}
cout<<endl;
for(i=1;i<=n;i++){
sum+=a[i].value*(n-i);
}
double s2=sum/n;
cout<<fixed<<setprecision(2)<<s2<<endl;
return 0;
}