小白编程 | CCF CSP201903-1小中大(思路分析)

CCF CSP201903-1小中大(思路分析)

纠错:QQ1002726595

解题思路

  1. 最大最小值的输出:

    题目给出有序数列,可通过max、min函数直接输出。

    (要是有强迫症非得排个序就用sort函数给它一个指定顺序的排列,输出第一位和最后一位。不过我想应该没有人和我想的一样吧。)

  2. 中位数的计算

    mid = x + y / 2

    这里涉及到一个浮点数精度的问题,在C++中如果要输出小数有几种写法

int x = 2, y = 3;

//由于整数运算结果还是整数,所以将其强制转换为浮点数类型
printf("(double)(x + y) / 2 = %.1lf\n", (double)(x + y) / 2);

//为了精确到小数,添加精度
printf("(x + y) / 2.0 = %.1lf\n",(x + y) / 2.0);

以上代码段输出:

(double)(x + y) / 2 = 2.5

(x + y) / 2.0 = 2.5

AC代码

#include 

using namespace std;

/*/
3
-1 2 4

4
-2 -1 3 4

4
1 2 3 4

//*/
int main(){
	int n;
	cin >> n;
	int a[n];	//用来存数据的 
	for(int i = 0 ; i < n; i++){
		scanf("%d",&a[i]);
	}
	//题目给的有序的数据所以取最大最小就可以了 
	int n_max = max(a[0],a[n-1]);	
	int n_min = min(a[0],a[n-1]);
	if(n % 2 != 0){	
		// 如果是奇数个按照整型输出
		printf("%d %d %d",n_max, a[n/2], n_min); 
	} else{ 
		/*/ 通过与(&)运算判断中间数相加是否是奇数
		    (9)10 = (1001)2
		&   (1)10 = (0001)2
	    ——————————————————————
	                 0001
		//*/
		//如果是奇数除2肯定带有小数,按浮点数输出 
		if((a[n/2 - 1] + a[n/2]) & 1){
			printf("%d %.1lf %d",n_max, (a[n/2 - 1] + a[n/2])/2.0, n_min);
		}else{
			//不是奇数的话按整型输出 
			printf("%d %d %d",n_max, (a[n/2 - 1] + a[n/2])/2, n_min);
		}
	}
	return 0;
}

要点

浮点数类型、精度。

你可能感兴趣的:(CSP)