CCF-CSP 201903-1 小中大(C++满分代码)

201903-1
试题名称: 小中大
时间限制: 1.0s
内存限制: 512.0MB
问题描述:
CCF-CSP 201903-1 小中大(C++满分代码)_第1张图片
中位数:将数据排序后,位置在最中间的数值.当样本数为奇数时,中位数=第(N+1)/2个数据 ; 当样本数为偶数时,中位数为第N/2个数据与第N/2+1个数据的算术平均值 .
注意:不需要剔除重复的数据之后再计算中位数
初中学过的中位数其实在现实中运用得很多,比如说一个公司的人员工资的中位数,肯定有很多人的工资是相同的呀!自己怎么就忘了定义呢。

错误的代码:只得了15分,原因是自己理解错了中位数的定义,所以解题过程不对(亏自己前几天还做了一道中位数的题目)


#include

#include
using namespace std;
const int N = 100005; 
int main()
{
	float a[N];   vector<float> b;
	int n;
	cin>> n;  cin >> a[0];		b.push_back(a[0]);
	
	for (int i = 1; i < n; i++)
	{
		cin >> a[i];
		if (a[i] != a[i - 1])
			b.push_back(a[i]);

	}
	if (b.size() == 1)
	{
		cout << a[0] << " " << a[0] << " " << a[0] << endl;	return 0;
	}
	else
	{
		int max = b[b.size() - 1];
		int min = b[0];
		float median; //中位数
		if (b.size() % 2 == 0)
			{
				median = (b[b.size() / 2] + b[b.size() / 2 - 1]) / 2; 
				int tmp=int (median);
				if(median-tmp==0)
				{
					cout << max << " " <<tmp<<" "<< min << endl;	
					
				}
				else
				{
					cout << max << " " ;
					printf("%.1f",median) ;
					cout<<' ' << min << endl;
					
				}
			}
			
			 
		else
			{
				median = b[b.size() / 2 ];
				cout << max << " " <<median<<" "<< min << endl;
			}
		

	}
	return 0;
}

搞清楚中位数的定义,题目反而变简单了,题目中保证有序,是升序降序不一定,所以我们可以用sort令它为升序。
满分代码:


#include
#include
#include
using namespace std;
const int N = 100005; 
int main()
{
	float a[N];  
	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 median; //中位数
		if (n % 2 == 0)
			{
				median = (a[n / 2] + a[n/ 2 - 1]) / 2; 
				int tmp=int (median);
				if(median-tmp==0)  //如(-1+3)/2=1.0   1.0-1==0 
				{
					cout << max << " " <<tmp<<" "<< min << endl;	
					
				}
				else
				{
					cout << max << " " ;
					printf("%.1f",median) ;
					cout<<' ' << min << endl;
					
				}
			}
				 
		else
			{
				median = a[n / 2 ];
				int tmp=int(median);
				cout << max << " " <<tmp<<" "<< min << endl;
			}
		

	}
	return 0;
}

你可能感兴趣的:(CCF-CSP,练习题)