1:去掉一个数组里的最大值与最小值,求数组元素的平均值。函数接口为:float avescore(float score[] ,int n)解析:此题比较简单,循环一遍,记下数组的最大值与最小值以及总和,然后在求的总和里面减掉最大值与最小值,再求平均数即可,时间复杂度为O(n),代码不多,如下有两种解法
解法一:
float avescore(float score[] ,int n)
{
float max=0,min=score[0],sum=0;
for(int i=0;i<n;i++)
{
sum+=score[i];
max=max<score[i]?score[i]:max;
min=min>score[i]?score[i]:min;
}
return (sum-max-min)/(n-2);
}
解法二<STL解决>
#include<iostream>
#include<algorithm>
#include<numeric>
using namespace std;
float avescore(float score[] ,int n)
{
float max=*max_element(score,score+n);
float min=*min_element(score,score+n);
return (accumulate(score,score+n,0.0)-max-min)/(n-2);
}
2: 对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。
函数接口为:void sortArray(int a[],int n)
解析,本题思路先遍历一遍数组,得出数组中的奇数个数与偶数个数,根据奇偶个数分别开辟空间再使用泛型算法对两个数组进行排序,奇数数组根据题意应该从小到大排序,偶数数组应是从大到小进行排序,再将排好序的数组根据题意要求重新赋值到原数组里,算法的空间复杂度O(n),不是很好的一个算法,开辟的空间要记得回收
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
void sortArray(int score[] ,int n)
{
int maxO=0,maxE=0,oIndex=0,eIndex=0;
int *od=0,*ev=0;
for(int i=0;i<n;i++)
score[i]%2==0?++maxE:++maxO;
od=new int[maxO];
ev=new int[maxE];
for(int j=0;j<n;j++)
score[j]%2==0?ev[eIndex++]=score[j]:od[oIndex++]=score[j];
sort(od,od+maxO,less<int>());
sort(ev,ev+maxE,greater<int>());
oIndex=eIndex=0;
for(int k=0;k<n;k++)
if((k%2==0&&oIndex<maxO)||(k%2!=0&&eIndex>=maxE))
score[k]=od[oIndex++];
else if((k%2!=0&&eIndex<maxE)||(k%2==0&&oIndex>=maxO))
score[k]=ev[eIndex++];
free(od);
free(ev);
}