第十六讲项目5.1 - 发奖金

问题描述

1)过年了,村里要庆祝一下。村长对村里的128个村民说:做一个游戏,让每个人把出生年+月+日得到一个数。例如:1995年11月8日=1995+11+8=2014。然后把这个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元(在程序中可以用常量固定为一个数)。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只 有一个人得奖,奖金都归这个人。如 果有多于一个人得奖,则他们平分这 笔钱。现在让我们来写一段程序算算 都有哪些人得到了奖金?得到多少?这个程序

(2)有村民提出村长在幸运数字上做手脚,不公平。修改后的规则是:每人写一个1000以内的数字,谁写的数字与平均值最接近,M元的奖金就由谁拿,有多人与平均值差值相同,则均分。例如,参加的村民有5个人,报的数字分别为98、7、50、980、1,平均值为227(平均值也取成整数就行了),与98最接近,编号为0的村民得奖。这个游戏实际上有很强的政治学背景,一种策略是串通,大家都报一样的数,平分奖金;在每个人都想争取最大利益的前提下,各人报的数字又对结果都有影响,这里面包含一系列非常有意思的研究课题。

   提示: 输入数据后,用一次循环求和,进而求出平均值;再一次循环,求出最小的差值;再一次循环,将差值最小的村民的编号放入幸运数组(因为可能不止一位,所以需要这个数组)。

程序代码

#include <stdio.h>
#define luckyMoney 2019
#define People 8
/*
*csdn学院--2016级
*目的:让代码见证成长(作为一个初学的菜鸟,如
*大家有发现错误,欢迎指正!)
*文件名称:Myfun147.c
*作者:小臣小仁
*问题描述:复制字符串空格除外
*完成日期:2017年4月16日
*/
int main()
{
    int aver,sum=0,min=999;
    int i,n,luckyNum=0;
    int diff[People];
    int luckypeople[People];
    int sumPeople[People];
    for(i=0;i<People;i++)
    {
        scanf("%d",&sumPeople[i]);
        sum+=sumPeople[i];
    }
    aver=sum/People;
    for(i=0;i<People;i++)
    {
        if(sumPeople[i]<aver)
            diff[i]=aver-sumPeople[i];
        else
            diff[i]=sumPeople[i]-aver;
        if(diff[i]<min)
            min=diff[i];
    }
    for(i=0;i<People;i++)
    {
        if(diff[i]==min)
        {
            luckypeople[luckyNum]=i;
            luckyNum++;
        }
    }
    printf("平均值%d,平均最小差%d\n",aver,min);
    printf("共获奖%d位",luckyNum);
    for(n=0;n<luckyNum;n++)
        printf("第%d为获得%d元",luckypeople[n],luckyMoney/luckyNum);
    return 0;
}


输出结果


知识点总结

作为一个大学二的菜鸟,开始慢慢前进,多多少少感到有收获,由于水平有限,多多少少有错,望包涵大笑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值