为啥只有50分 求大神指导 困扰一天了

B2095 白细胞计数

1234ss @ 2022-11-07 17:00:10


 include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
   int number,a,c=0;
   scanf("%d",&number);
   float example[number],max,min,sum=0,max2;
   for(a=0;a<number;a++)
     {scanf("%f",&example[a]);}
        min=max=example[0];

   for(a=1;a<number;a++)
     {
      if(max<example[a])
         max=example[a];
      if(min>example[a])
         min=example[a];
     }
    for(a=0;a<number;a++)
        {sum+=example[a];}
        sum=sum-max-min;

    for(a=0;a<number;a++)
     {
      if(example[a]!=max&&example[a]!=min)
         {
         if(c==1)
        {
    if(max2<fabs(example[a]-sum/(number-2)))                         max2=fabs(example[a]-sum/(number-2));
        }

         if(c==0)
    {
      max2=fabs(example[a]-sum/(number-2));
          c++;
           }
    }
     }
    printf("%.2f %.2f",sum/(number-2),max2);    

    return 0; 
} 

by yinqf @ 2022-11-07 21:11:03

@1234ss

本题要求去掉一个最大值一个最小值样本,而不是所有的最大值最小值样本

如果明白了,记得关注,谢谢


by 1234ss @ 2022-11-08 13:41:56

@yinlg


#include <stdlib.h>
#include <math.h>
int main()
{
   int n,a,b,p1,p2;
   scanf("%d",&n);
   float num[n],max,min,sum=0,num2[n-2];
   for(a=0;a<n;a++)
    scanf("%f",&num[a]);
   max=min=num[0];
   for(a=0;a<n;a++)
   {    sum+=num[a];
       if(max<num[a])
          {max=num[a];
          p1=a;}

       if(min>num[a])
          {
            min=num[a];
              p2=a;}
   }
      sum=sum-max-min;
      for(a=0;a<n-2;a++)
        for(b=0;b<n;b++)
           if(b!=p1&&b!=p2)
            num2[a]=num[b];

         max=fabs(num2[0]-sum/(n-2));
     for(a=0;a<n-2;a++)
       if(max<fabs(num2[a]-sum/(n-2)))
       max=fabs(num2[a]-sum/(n-2));

printf("%.2f %.2f",sum/(n-2),max);

    return 0;#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
   int n,a,b,p1,p2;
   scanf("%d",&n);
   float num[n],max,min,sum=0,num2[n-2];
   for(a=0;a<n;a++)
    scanf("%f",&num[a]);
   max=min=num[0];
   for(a=0;a<n;a++)
   {    sum+=num[a];
       if(max<num[a])
          {max=num[a];
          p1=a;}

       if(min>num[a])
          {
            min=num[a];
              p2=a;}
   }
      sum=sum-max-min;
      for(a=0;a<n-2;a++)
        for(b=0;b<n;b++)
           if(b!=p1&&b!=p2)
            num2[a]=num[b];

         max=fabs(num2[0]-sum/(n-2));
     for(a=0;a<n-2;a++)
       if(max<fabs(num2[a]-sum/(n-2)))
       max=fabs(num2[a]-sum/(n-2));

printf("%.2f %.2f",sum/(n-2),max);

    return 0;
}
我改了只减去一次   ,还是不行   成十分了

by MTFlowCzq @ 2022-11-19 14:37:43

程序有点乱,看不懂。。。

还有 不是数组大小必须是常量吗(

难道我学了个假的C++?(doge

不过我看出来一些毛病,你想要把有效元素复制到num2里,但这里的循环有问题哦

推荐一个不错的方法(如果不用sort,题解里没有)就是找到最大最小值和位置以后,把它们和最前面、最后面元素交换,然后只看中间的下标从1~n-1的元素就行啦


|