题意
输入6个数,找出最大最小的去掉,其余的求平均数。输入 0 0 0 0 0 0 结束
思路
思路1:用Bool矩阵记录,找出最大最小的去掉,然后对其他的四个进行求平均数(我的失误点在于没有正确的初始化)
思路2:给6个数排序,把第二个到第五个加和然后求平均数~
代码
// author:seen
// time:2015-09-24
// POJ 3507
#include <iostream>
using namespace std;
int num[6];
bool trek[6];
int main(){
while(cin>>num[0]>>num[1]>>num[2]>>num[3]>>num[4]>>num[5]){
memset(trek,true,6*sizeof(bool)); //初始化bool矩阵
if(num[0]==0&&num[1]==0&&num[2]==0&&num[3]==0&&num[4]==0&&num[5]==0) break;
int min=num[0],max = num[0],flag_min=0,flag_max=0,i;
double sum=0;
for(i=1;i<6;i++){ //找出最大最小数
if(num[i]>max) max = num[i];
if(num[i]<min) min = num[i];
}
for(i=0;i<6;i++){
if(num[i]==max &&flag_max==0) {trek[i]=false;flag_max=1;continue;} //两个标志变量及continue用的很精髓
if(num[i]==min &&flag_min==0) {trek[i]=false;flag_min=1;}
}
for(i=0;i<6;i++){
if(trek[i]){
sum+=num[i];
}
}
cout<<sum*1.0/4*1.0<<endl; //按格式输出
}
return 0;
}
按照思路二写的代码就简单的多了,因为algorithm头文件封装了sort函数
#include <iostream>
#include <algorithm>
using namespace std;
int num[6];
int main(){
while(cin>>num[0]>>num[1]>>num[2]>>num[3]>>num[4]>>num[5]){
double sum=0;
if(num[0]==0&&num[1]==0&&num[2]==0&&num[3]==0&&num[4]==0&&num[5]==0)
break;
sort(num,num+6); //排序
for(int i=1;i<5;i++){
sum+=num[i];
}
cout<<sum/4.0<<endl;
}
return 0;
}