洛谷 P1109 学生分组

在这里插入图片描述
思路:学生分组总的来说他肯定是会是学生人数在下限和上限之间,我们会发现只要让其他的数据在这个范围内即可,所以我们分别记录低于下限有多少人,高于上线得有多少人,我们会发现只要上限或下限两者人数多的那个回到这个范围就了,还有一种特殊情况就是上,下限相同的情况,我们要来判断上下限相同即为平均值所以我们要判断一下

#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);
            }



    }


   }




}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值