思路对了但0分c++

B2095 白细胞计数

zbyzhaoboyu0 @ 2024-07-19 12:26:42

#include<bits/stdtr1c++.h>
using namespace std;
double a[1000];
int main(){
    int n;
    double sum=0;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a,a+n);
    for(int i=1;i<n-1;i++){
        sum+=a[i];
    }
    sum/=n;
    printf("%.2f",sum);
    cout<<" ";
    sum=0;
    int q;
    for(int i=1;i<n-1;i++){
        q+=a[i]-sum;
    }
    printf("%.2f",q);
    return 0;
} 

by Alex_smy @ 2024-07-19 12:38:48

@zbyzhaoboyu0 问题有点多

  1. sum/=n 要改成 sum/=(n+2)
  2. 所有的 %.2f 要改成 %.2lf,因为是 double 类型;

by Alex_smy @ 2024-07-19 12:41:54

还有你题意理解错了,q+=a[i]-sum; 应该是 q=max(q,abs(a[i]-sum));

还有 $sum$ 改为 $0$ 了再减 $sum$ 有什么意义?把这一行删掉。

by zbyzhaoboyu0 @ 2024-07-19 13:18:17

#include<bits/stdtr1c++.h>
using namespace std;
double a[1000];
int main(){
    int n;
    double sum=0;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    sort(a,a+n);
    for(int i=1;i<n-1;i++){
        sum+=a[i];
    }
    sum/=(n+2);
    printf("%.2lf",sum);
    cout<<" ";
    double q=0;
    for(int i=1;i<n-1;i++){
        q=q+max(q,abs(a[i]-sum));
    }
    printf("%.2lf",q);
    return 0;
} 

还是不对 求指教 麻烦了


by EVERYWAY @ 2024-07-20 09:35:04

@zbyzhaoboyu0 有两个小问题

第一,第15行应为 sum/=(n-2) ,因为去了最大和最小值后,只有 n-2 个数了

第二,第20行要去掉 q+ 不然会把所有差值累加起来

已AC 求关


|