[POJ 문제풀이]: POJ3507 Judging Olympia

6029 단어 정렬코드poj

제목의 뜻


6개의 수를 입력하고 가장 작은 것을 찾아내고 나머지는 평균을 구한다.0 0 0 0 0 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;
}

좋은 웹페이지 즐겨찾기