刚参加完昨天的CCF,本人菜鸟一枚,今天成绩下来才得了100分前两道题分都没拿全,很是伤心。不过没有关系12月份还有一次CCF考试,从现在开始准备不知道来不来的及,学的东西忘的太多了,平时代码能力也不强,这里就当一个记录贴吧。
试题编号: 201903-1
试题名称: 小中大
时间限制: 1.0s
内存限制: 512.0MB
85’
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
int n;
float mid;
cin>>n;
int *a=new int[n]; //动态数组
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int max=a[n-1],min=a[0];
if(a[0]>a[n-1])
{
min=a[n-1];
max=a[0];
}
if(n==1)
{
mid=a[0];
}else if(n%2==0)
{
mid=(a[(n-2)/2]+a[((n-2)/2)+1])*1.0/2;
}else if(n%2==1)
{
mid=a[(n-1)/2];
}
cout<<max<<" ";
if((mid-int(mid))!=0)
{
cout<<fixed<<setprecision(1)<<mid<<" ";
}else
{
cout<<mid<<" ";
}
cout<<min;
return 0;
}
后来发现是没有四舍五入的原因
改正如下
100’
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
long int n;
float mid;
cin>>n;
int *a=new int[n]; //动态数组
for(int i=0;i<n;i++)
{
cin>>a[i];
}
int max=a[n-1],min=a[0];
if(a[0]>a[n-1])
{
min=a[n-1];
max=a[0];
}
if(n==1)
{
mid=a[0];
}else if(n%2==0)
{
mid=(a[(n-2)/2]+a[((n-2)/2)+1])*1.0/2;
}else if(n%2==1)
{
mid=a[(n-1)/2];
}
cout<<max<<" ";
if((mid-int(mid))!=0)
{
cout<<setiosflags(ios::fixed)<<setprecision(1)<<mid<<" ";
}else
{
cout<<setiosflags(ios::fixed)<<setprecision(0)<<mid<<" ";
}
cout<<min;
delete []a;
return 0;
}
感觉这个题坑挺多的,一个是有序数组有正序和反序要考虑到,还有一个是测试数据集大小的问题,还有这个坑爹的四舍五入和保留小数点。审题还是要认真啊,发现一二题的100分也是不好拿。