提高篇编程项目 第十九讲 扑克牌 发奖金

来源:互联网 发布:铭牌设计软件 编辑:程序博客网 时间:2024/06/09 19:48

任务和代码:

【项目4-一副扑克牌】
下面的程序,输出了52张扑克牌(如图)

注:H、S、D、C代表4种花色

/**Copyright (c) 2016, CSDN学院*All rights reserved.*文件名:main.c*作者:DylanLiu*完成日期:2016/11/05*版本号:V1.0**问题描述:。*程序输出:。*/#include <stdio.h>int main( ){    char c[4]= {'H','S','D','C'};    int v[13]= {1,2,3,4,5,6,7,8,9,10,11,12,13};    int i,j;    for(i=0; i<4; i++)    {        for(j=0; j<13; j++)        {            printf("%c",c[i]);            if(v[j]==1)                printf("A");            else if(v[j]==11)                printf("J");            else if(v[j]==12)                printf("Q");            else if(v[j]==13)                printf("K");            else                printf("%d",v[j]);            printf(" ");        }        printf("\n");    }    return 0;}

输出结果:

任务和代码:

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

/**Copyright (c) 2016, CSDN学院*All rights reserved.*文件名:main.c*作者:DylanLiu*完成日期:2016/11/05*版本号:V1.0**问题描述:过年了,村里要庆祝一下。村长对村里的128个村民说:做一个游戏,让每个人*          把出生年+月+日得到一个数。例如:1995年11月8日=1995+11+8=2014。然后把这*          个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元(在程序中可以用常*          量固定为一个数)。如果有人报上来的数字与M相同,就把这笔钱发给这些人。*          如果只有一个人得奖,奖金都归这个人。如果有多于一个人得奖,则他们*          平分这笔钱。现在让我们来写一段程序算算都有哪些人得到了奖金?得到多少?。*程序输出:。*//* ********************************************************************************************** *//* ***************************说明: 测试时只用了10组数据************************************** *//* ********************************************************************************************** */#include <stdio.h>#define N 10       //128个村民#define M 2014      //钱的数量int main(void){    int year[N]={0};    int month[N]={0};    int day[N]={0};    int i=0;    int sum[N]={0};    int count=0; //得奖的村民的数目    float ave=0.0; //获奖者平均的奖金数目    //printf("请输入年, 月, 日: ");    for (i=0; i<N; i++){        printf("请输入您(第%d位)的生日(年,月,日): ", i+1);        scanf("%d %d %d", &year[i], &month[i], &day[i]);    }    for (i=0; i<N; i++){        sum[i] = year[i]+month[i]+day[i];    }    for (i=0; i<N; i++){        if(sum[i]==M){            printf("中奖的是:%d\t 他(她)的生日为:%d %d %d\n", i+1, year[i], month[i], day[i]);            count++;        }    }    ave=M/count;    printf("他(她)们每人获得的奖金为:%.2f\n", ave);    return 0;}

输出结果:

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

/**Copyright (c) 2016, CSDN学院*All rights reserved.*文件名:main.c*作者:DylanLiu*完成日期:2016/11/05*版本号:V1.0**问题描述:每人写一个1000以内的数字,谁写的数字与平均值最接近,M元的奖金就由谁拿,*          有多人与平均值差值相同,则均分。例如,参加的村民有5个人,报的数字分别为*          98、7、50、980、1,平均值为227(平均值也取成整数就行了),与98最接近,编号为0的*          村民得奖。这个游戏实际上有很强的政治学背景,一种策略是串通,大家都报一样的*          数,平分奖金;在每个人都想争取最大利益的前提下,各人报的数字又对结果都有影响,*          这里面包含一系列非常有意思的研究课题。。*程序输出:。*/#include <stdio.h>#define MONEY 2014       //总奖金(单位:万元)#define POPULATION 8   //参赛的人数int main( ){    int people[POPULATION];       //记录村民上报数据    int minu[POPULATION];         //记录每个人与平均值的差    int luckyPeople[POPULATION];  //记录获奖者编号    int nLucky=0;                 //获奖者人数    int sum=0, ave, min_minu=9999; //和、平均、差值、最小差值    int i;    for (i=0; i<POPULATION; i++)   //输入村民报的数字    {        printf("请第%d位参赛者输入:", i+1);        scanf("%d",&people[i]);        sum+=people[i];           //输入后立即求和    }    ave=sum/POPULATION;           //求平均    for (i=0; i<POPULATION; i++)  //与平均数的差值保存到minu数组中,在同一循环中求出最小值    {        if(people[i]>ave)         //分情况,使差值保持非负            minu[i]=people[i]-ave;        else            minu[i]=ave-people[i];        if(min_minu>minu[i])    //需要时,修改最小差值            min_minu=minu[i];    }    for (i=0; i<POPULATION; i++)  //找出最小差值的村民    {        if (minu[i] == min_minu)        {            luckyPeople[nLucky] = i;            nLucky ++;        }    }    //输出获奖者编号及所获奖金数额    printf("平均值为%d,与平均值的最小差值是%d\n",ave,min_minu);    printf("共有%d位获奖,他(们)是\n", nLucky);    for (i=0; i<nLucky; i++)    {         printf("  第%d位,报数%d,得奖金%d\n", luckyPeople[i], people[luckyPeople[i]], MONEY/nLucky);    }    return 0;}

输出结果:

0 0
原创粉丝点击