最近感觉有点烦躁和浮躁!难绷
P8717
类型:模拟题
解法:#include<bits/stdc++.h>
using namespace std;
int main()
{
int min,max,n,i;
double average=0,sum=0;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++){
scanf("%d",&a[i]);
sum+=a[i];
}
average=sum/n;
sort(a,a+n);
min=a[0],max=a[n-1];
printf("%d\n%d\n%.2f",max,min,average);
return 0;
}
分析:我的代码相对来说时比较容易想到的,先通过数组来储存数字,然后对数字进行排序,进而求出最大值和最小值以及平均值,难度较小的模拟题;
易错点:浮点型数据的处理和求平均值的被除数容易写成非n数。
改进点:因为题目感觉过于简单,不想浪费太多时间,就简单看了下官方解法。
我是用的方法时间复杂度是n*log(n)(排序的时间复杂度)。我觉得可以学到的有对于类型转换(double)直接实现int转换或者*1.0也可以实现,同时直接除于n然后输出也是可以改进的点,更加简单啦!将数组开大点可以进一步减少代码行数,但是挤压了空间,增加了空间复杂度,不可取!
对于输出的控制小数点位数在cout中可以采用fixed与setprecision(n)连用可以控制小数点后的位数,但我觉得没有我写的好记,哈哈哈。排序完直接对最大值和最小值的输出也是可以改进的一个点
解法二:可以采用stl中的min和max函数!
直接对输入的数据进行判断,最后输出,减少了数组的操作!而且时间复杂度相对于上着小。但是看情况喽,本人有时候比较懒,只想简单点写。