1. 题目见这里

  2. 典型的模拟题,注意对于一名玩家前面的牌堆来说,仅最上面一张牌的内容有意义; 然后就是注意在“Ring” succeed后,所有玩家的playedCards清零。

  3. 代码如下:

#include <stdio.h>
#include <string.h>
#define N  10
#define SCARD 10000000
#define KIND 4typedef struct{ int cards; //玩家拥有的牌数 int playedCards; //玩家面前的牌数(不区分种类)//top cardint kind; //标记animal or fruit int attri[KIND];
}Player;void Init(Player *player, int n){int i,j;for(i=0;i<n;i++){player[i].cards = SCARD;player[i].playedCards = 0;}
}int IsRingSucceed(Player *player, int n){int fruit[KIND]={0},animal[KIND-1]={0};int i,j;for(i=0;i<n;i++){if(player[i].playedCards){ //要做是否出过牌的判断 if(player[i].kind==KIND){ //fruitfor(j=0;j<KIND;j++) fruit[j] += player[i].attri[j];}else{ //animalfor(j=0;j<KIND-1;j++)   animal[j] += player[i].attri[j];} }}//1.某种水果的数量正好为5for(j=0;j<KIND;j++) if(fruit[j]==5) return 1;//2.出现猴子,至少有一个水果,且没有出现柠檬//3.出现大象,至少有一个水果,且没有出现草莓//4.出现猪,且至少有一个水果if((animal[0] && !fruit[3]) || (animal[1] && !fruit[1]) || animal[2]){for(j=0;j<KIND;j++)if(fruit[j]) return 1;}return 0;
}int Judge(char *opt, int turnPlayer, Player *player, int n){int i;if(!strcmp(opt,"Fruit")){player[turnPlayer].cards --;player[turnPlayer].playedCards ++;player[turnPlayer].kind = KIND;for(i=0;i<KIND;i++)player[turnPlayer].attri[i] = 0;int fruits,fruitAttri;scanf("%d",&fruits);while(fruits--){scanf("%d",&fruitAttri); player[turnPlayer].attri[fruitAttri] ++;}turnPlayer = (turnPlayer+1)%n;}else if(!strcmp(opt,"Animal")){player[turnPlayer].cards --;player[turnPlayer].playedCards ++;player[turnPlayer].kind = KIND-1;for(i=0;i<KIND-1;i++)player[turnPlayer].attri[i] = 0;int animalAttri;scanf("%d",&animalAttri);player[turnPlayer].attri[animalAttri] = 1;turnPlayer = (turnPlayer+1)%n;}else{ //Ringint ringer,i;scanf("%d",&ringer);if(IsRingSucceed(player,n)){for(i=0;i<n;i++){player[ringer].cards += player[i].playedCards;player[i].playedCards = 0; //清0 }}  else{player[ringer].cards -= n;  for(i=0;i<n;i++) player[i].cards ++;}turnPlayer = ringer; //ringer始终是下一位出牌者 }return turnPlayer;
}int main(){
//  freopen("Data.txt","r",stdin);Player player[N];char opt[7];int n,k,i,turnPlayer;scanf("%d",&n);Init(player,n);scanf("%d",&k);getchar();turnPlayer = 0;while(k--){scanf("%s",opt);turnPlayer = Judge(opt,turnPlayer,player,n);getchar();}for(i=0;i<n;i++) printf("%d\n",player[i].cards);return 0;
} 

#1531:德国心脏病相关推荐

  1. hihocoder 1531 德国心脏病 (模拟)

    描述 Jack在和朋友们玩德国心脏病. 德国心脏病的游戏牌分为水果牌和动物牌.水果只有4种:香蕉.草莓.樱桃.柠檬,每张水果牌上会有种类不定.总数目1-5的水果:动物只有3种:猴子.大象.猪,每张动物 ...

  2. HihoCode 1531 : 德国心脏病

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Jack在和朋友们玩德国心脏病. 德国心脏病的游戏牌分为水果牌和动物牌.水果只有4种:香蕉.草莓.樱桃.柠檬,每张水果牌上 ...

  3. 寒假算法学习 OI生涯 - 悄无声息(模拟+线性DP优化) OI生涯 - 德国心脏病 (模拟)

    OI生涯 - 悄无声息 题目描述 「李」走路是没有动静的,如果你在干「李」不让你干的事情,他会神不知鬼不觉的走到你的身后,然后把你奶一顿! 因为你知道「李」走路没有动静,所以为了提防,可以认为「李」有 ...

  4. hihocoder 第280周德国心脏病c++

    #题目: Jack在和朋友们玩德国心脏病. 德国心脏病的游戏牌分为水果牌和动物牌.水果只有4种:香蕉.草莓.樱桃.柠檬,每张水果牌上会有种类不定.总数目1-5的水果:动物只有3种:猴子.大象.猪,每张 ...

  5. 桌游“德国心脏病”的C语言代码实现

    目前C语言小白,刚接触C语言半年,最近借着学校课程设计的机会写了一个小游戏,打算分享出来. PS:由于本人代码水平很差,所以600行代码中有很多重复代码,程序的结构也不是太合理,如果有哪位大神感兴趣给 ...

  6. 桌游“德国心脏病”的python代码实现

    没错!C语言小白又开始学习python啦,现在光荣晋升一位python小白,于是我又用python重新编了一次之前的游戏,具体规则请参见我的上一篇文章. 遗憾的是,下面200行代码并没有涉及到面向对象 ...

  7. 德国公民信用相关数据_作为公民数据科学家,没有任何事

    德国公民信用相关数据 数据科学,意见(Data Science, Opinion) Dear Aspiring Data Scientist, 亲爱的有抱负的数据科学家, Before you sta ...

  8. The 14th Chinese Northeast Collegiate Programming Contest 补题

    题目链接 https://codeforces.com/gym/102801 参考题解 B - Team 简要题意: 给定 nnn 和 MMM,有三个组 ABCABCABC,每组 nnn 个人,每人都 ...

  9. 研究显示每天工作超8小时得心脏病概率增加80%,生命很重要,工作不要那个累。

    每天工作超过8小时的人患心脏病的风险最高可增加80%(资料图) 据英国<每日邮报>9月12日报道,芬兰职业保健研究所的科学家们近日进行了一项研究,他们发现每天工作超过8小时的人患心脏病的风 ...

最新文章

  1. 迭代器接口IteratorAggregate 与类 ArrayIterator(转)
  2. syslog-ng+loganalyzer log system install guide
  3. C#中如何将将数据导出到word excel 中
  4. OpenCV显示图片的实例(附完整代码)
  5. oracle sysauth,sysauth$基表的用户权限的一点分析
  6. 计算机界面横向拉宽了怎样还原,电脑屏幕变大变小了如何还原
  7. CSS基本知识之复合选择器、元素显示模式、背景图片位置,精灵图
  8. 条件判断_判断疑似陨石应具备什么条件下,才能判断陨石真伪
  9. 二层协议--LACP协议总结
  10. excel如何批量查询手机号归属地
  11. 阿里巴巴分布式消息系统的实践之路
  12. Audio专业名词解析
  13. 用CSS添加鼠标样式-箭头、小手、十字 CSS实现虚线之dotted边框-点虚线、dashed边框-破折号虚线
  14. 梯度下降计实例计算(二维)
  15. C函数参数中的三个点
  16. select语句(3)--单值函数
  17. 什么是大数据的ETL
  18. RISC-V应用于高性能处理器的可能性
  19. 简单的给数字加密解密
  20. Android拦截电话

热门文章

  1. java游戏时间条_java – 如何获得游戏的实时时间
  2. python123是啥_Python123
  3. 多任务学习在推荐中的探索
  4. Photoshop CEP扩展倒角插件
  5. Qt Creator中如何为某项目单独配置默认编码方式
  6. MATLAB矩阵归一化
  7. (转载)图灵测试,测的到底是什么?
  8. Serif和Sans-serif字体的区别
  9. CLRS 5.1雇佣问题
  10. 【Kafka】kafka命令 kafka-console-producer