问题分析
样例一:
输入:
3
-1 2 4
输出:
4 2 -1
样例二:
输入:
4
-2 -1 3 4
输出:
4 1 -2
第一回合:又是80
#include<iostream>
#include<algorithm>
using namespace std;
int n;
const long long COUNT=3000000;
int arr[COUNT];
int f(int *arr,int n){
if(n%2){
return arr[n/2];
}
return (arr[n/2]+arr[n/2-1])/2;
}
int main(){
cin>>n;
int ans[4]={0};
for(int i=0;i<n;i++){
cin>>arr[i];
}
ans[1]=f(arr,n);
// cout<<ans[1];
sort(arr,arr+n);//默认升序
ans[0]=arr[n-1];
ans[2]=arr[0];
for(int i=0;i<3;i++){
cout<<ans[i]<<" ";
}
return 0;
}
第二回合
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int NUM=1000000;
int main(){
float a[NUM];
int n;
cin>>n;
if(n==1){
cout<<a[0]<<" "<<a[0]<<" "<<a[0]<<endl;
return 0;
}
else{
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
int MAX=a[n-1];
int MIN=a[0];
float m;
if(n%2==0){
m=(a[n/2]+a[n/2-1])/2;
int t=int(m);
if(m-t==0){
cout<<MAX<<" "<<t<<" "<<MIN<<endl;
}else{
cout<<MAX<<" ";
printf("%.1f",m);//四舍五入保留一位小数
cout<<" "<<MIN<<endl;
}
}
else{
m=a[n/2];
int t=int(m);
if(m-t==0){
cout<<MAX<<" "<<t<<" "<<MIN<<endl;
}else{
cout<<MAX<<" ";
printf("%.1f",m);//四舍五入保留一位小数
cout<<" "<<MIN<<endl;
} }
}
return 0;
}
问题总结
- 第一版因为没有判断小数所以挂掉了
- 第二版加上判断是否为小数并且根据题意进行转换