思路:学生分组总的来说他肯定是会是学生人数在下限和上限之间,我们会发现只要让其他的数据在这个范围内即可,所以我们分别记录低于下限有多少人,高于上线得有多少人,我们会发现只要上限或下限两者人数多的那个回到这个范围就了,还有一种特殊情况就是上,下限相同的情况,我们要来判断上下限相同即为平均值所以我们要判断一下
#include <stdio.h>
int main()
{
int N;//表示有多少组学生
int students[100];//表示每组学生的个数
int num = 0;//表示学生的总人数
double l,r;//学生人数的上限和下限
int j = 0;//记录少几个人
int y = 0;//记录多几个人
int i;
scanf("%d",&N);
int average;
for(i = 0;i < N;i ++)
{
scanf("%d",&students[i]);
num = num + students[i];
}
scanf("%lf %lf",&l,&r);
average = num / N;
//printf("%d\n",average);
if(l == r)
{
if(num / l != N)
{
printf("-1");
}
else
{
for(i = 0;i < N;i ++)
{
if(students[i] < l)
{
j = j + l - students[i];
}
if(students[i] > r)
{
y = y + students[i] - r;
}
}
if(j > y)
{
printf("%d",j);
}
else
{
printf("%d",y);
}
}
}
else
{
if(average < l || average > r)
{
printf("-1");
}
else
{
for(i = 0;i < N;i ++)
{
if(students[i] < l)
{
j = j + l - students[i];
}
if(students[i] > r)
{
y = y + students[i] - r;
}
}
if(j > y)
{
printf("%d",j);
}
else
{
printf("%d",y);
}
}
}
}