https://www.acmicpc.net/problem/6986

 

6986번: 절사평균

첫째 줄에 절사평균(N, K)를, 둘째 줄에 보정평균(N, K)를 각각 소수점이하 셋째 자리에서 반올림하여 둘째 자리까지 출력한다. 예를 들어 결과값이 9.667인 경우 9.67로, 5인 경우 5.00으로, 5.5인 경우

www.acmicpc.net

 

 

[난이도] Silver3
[유형] 수학

[풀이]
double형으로 입력을 받고 문제의 조건대로 평균들을 구해주면 됩니다.
반올림 처리가 중요한데.
a라는 숫자를 소숫점 3번째에서 반볼림을 하려면
floor(a*100+0.5)/100 와 같이 floor 함수를 이용해주면 됩니다.

 

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int N,K;
double a[100001];
int main(){
    scanf("%d%d",&N,&K);
    for(int i=1;i<=N;i++) scanf("%lf",&a[i]);
    sort(a+1,a+N+1);
    double sum=0;
    for(int i=K+1;i<=N-K;i++){
        sum+=a[i];
    }
    double t = sum / (N-2*K);
    printf("%.2lf\n",floor(t*100+0.5)/100);
    for(int i=1;i<=K;i++){
        a[i]=a[K+1];
        a[N-i+1] = a[N-K];
    }
    sum=0;
    for(int i=1;i<=N;i++) sum+=a[i];
    t = sum / N;
    printf("%.2lf",floor(t*100+0.5)/100);    
}


https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver3/6986.cpp

+ Recent posts