提高项目16.2 村民奖金2

任务和代码:有村民提出村长在幸运数字上做手脚,不公平。修改后的规则是:每人写一个1000以内的数字,谁写的数字与平均值最接近,M元的奖金就由谁拿,有多人与平均值差值相同,则均分。例如,参加的村民有5个人,报的数字分别为98、7、50、980、1,平均值为227(平均值也取成整数就行了),与98最接近,编号为0的村民得奖。村里有一笔钱要作为游戏的奖金,数额为M元(在程序中可以用常量固定为一个数)。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只 有一个人得奖,奖金都归这个人。如 果有多于一个人得奖,则他们平分这 笔钱。现在让我们来写一段程序算算 都有哪些人得到了奖金?得到多少?请写出这个程序。

/*
文件名:main.c
作者:小风景
完成日期:2016.6.28
问题描述:有村民提出村长在幸运数字上做手脚,不公平。修改后的规则是:每人写一个1000以内的数字,谁写的数字与平均值最接近,M元的奖金就由谁拿,有多人与平均值差值相同,则均分。例如,参加的村民有5个人,报的数字分别为98、7、50、980、1,平均值为227(平均值也取成整数就行了),与98最接近,编号为0的村民得奖。村里有一笔钱要作为游戏的奖金,数额为M元(在程序中可以用常量固定为一个数)。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只有一个人得奖,奖金都归这个人。如果有多于一个人得奖,则他们平分这笔钱。现在让我们来写一段程序算算都有哪些人得到了奖金?得到多少?请写出这个程序。
程序输出:
*/

#include <stdio.h>
#include <math.h>

#define POPULAR 128
#define LUCKNUM 2048

int main()
{
    int people[POPULAR];
    int luckpeople[POPULAR];
    int lucknum = 0;
    int sum = 0;
    int aveg = 0;
    int imin = 1000;
    int i,cvalue;

    for(i = 0;i < POPULAR;i++)
    {
        printf("请输入第%d位村民报的数字:",i);
        scanf("%d",&people[i]);
        sum += people[i];
    }

    aveg = sum / POPULAR;
    for(i = 0;i < POPULAR;i++)
    {
        cvalue = fabs(people[i] - aveg);
        if(cvalue < imin)
        {
            imin = cvalue;
        }
    }

    for(i = 0;i < POPULAR;i++)
    {
        if((people[i] - aveg == imin) || (aveg - people[i] == imin))
        {
            luckpeople[lucknum] = i;
            lucknum++;
        }
    }

    printf("平均值为:%d , 最小差值为:%d\n",aveg,imin);
    printf("共有%d人获奖,他们分别是:\n",lucknum);
    for(i = 0;i < lucknum;i++)
    {
        printf("  第%d位,报数:%d ,获得奖金:%d",luckpeople[i],people[luckpeople[i]],LUCKNUM/lucknum);
    }

    return 0;
}


程序运行结果:



总结:程序分为三个部分,先输入村民的报数,然后求最小差值,最后将报数与平均数最小差值相等的人的消耗找出,求出能够分到的奖金,为了测试方便,我们将POPULAR的人数设置为10.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值