任务和代码:有村民提出村长在幸运数字上做手脚,不公平。修改后的规则是:每人写一个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.