博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P1148 拱猪计分
阅读量:4472 次
发布时间:2019-06-08

本文共 4929 字,大约阅读时间需要 16 分钟。

洛谷P1148 拱猪计分

题意:

拱猪是一种很有趣的扑克牌游戏。 即使你不知道它的玩法,你也可以由它的计分方式来了解它的趣味性。 假设在此我们仅考虑四个人的拱猪牌局,本题要求你根据下面的计分规则,在牌局结束时计算四位玩家所得分数。

  1. 我们分别以S、H、D 及 C 来代表黑桃,红心,方块及梅花,并以数字 1 至 13 来代表 A、2、…、Q、K 等牌点,例如︰ H1 为红心 A,S13 为黑桃 K。

  2. 牌局结束时,由各玩家持有的有关计分的牌(计分牌)仅有 S12 (猪),所有红心牌,D11 (羊)及 C10 (加倍)等16张牌。其它牌均弃置不计。若未持有这 16 张牌之任一张则以得零分计算。

  3. 若持有 C10 的玩家只有该张牌而没有任何其它牌则得 +50 分,若除了 C10 还有其它计分牌,则将其它计分牌所得分数加倍计算。

  4. 若红心牌不在同一家,则 H1 至 H13 等 13 张牌均以负分计,其数值为 -50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40。而且 S12 与 D11 分别以 -100 及 +100 分计算。

  5. 若红心牌 H1 至H13 均在同一家,有下列情形︰

o 所有红心牌以+200分计算。

o 若 S12、D11 皆在吃下所有红心牌之一家,则此玩家得 +500 分。

o 而 C10 还是以前面所述原则计算之。

例一:若各玩家持有计分牌如下:(每列代表一玩家所持有之牌)

S12 H3 H5 H13

D11 H8 H9

C10 H1 H2 H4 H6 H7

H10 H11 H12

则各家之得分依序为:-148、+83、-138 及 -60。

例二:若各玩家持有计分牌如下:(第四家未持有任何计分牌)

H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13

S12 C10

D11 则各家之得分依序为:+200、-200、+100 及 0。

例三:若有一玩家持有所有 16 张计分牌,则得 +1000 分。其余三家均得零分。

思路:

  然而我认为这道题并不需要什么思路。。。

注意:

  1、在所有的红桃牌都在一个玩家的手中时,S12 和 D11仍旧分别以 -100 和 +100 计分,这里被坑了好久。。。。。。

  2、输出的时候千万记得把+和-输在数字前面o(╥﹏╥)o

代码:

1 #include 
2 #include
3 #include
4 #include
5 using namespace std; 6 const int S[14]={
0,-50,-2,-3,-4,-5,-6,-7,-8,-9,-10,-20,-30,-40}; 7 int nums[5][21]; 8 int score[5]; 9 int i,j,k,m,n,heartcount,heartflag,sdcount; 10 char readc; 11 bool doubleflag; 12 void readInt(int &n){ 13 while((readc=getchar())<48||readc>57); 14 n=readc-48; 15 while((readc=getchar())>=48&&readc<=57) n=n*10+readc-48; 16 } 17 void readcard(int &n){ 18 while((readc=getchar())<48||readc>'z'); 19 switch(readc){ 20 case 'H': 21 n=1; 22 break; 23 case 'S': 24 n=2; 25 break; 26 case 'D': 27 n=3; 28 break; 29 case 'C': 30 n=4; 31 break; 32 } 33 while((readc=getchar())>=48&&readc<='z') n=n*10+readc-48; 34 if(n/100==0) { 35 int temp=n%10; 36 n/=10; 37 n*=100; 38 n+=temp; 39 } 40 } 41 int main(){ 42 #ifndef ONLINE_JUDGE 43 freopen("heart.in","r",stdin); 44 freopen("heart.out","w",stdout); 45 #endif 46 while(true){ 47 memset(score,0,sizeof(score)); 48 memset(nums,0,sizeof(nums)); 49 for(i=1;i<=4;i++){ 50 readInt(nums[i][0]); 51 for(j=1;j<=nums[i][0];j++){ 52 readcard(nums[i][j]); 53 } 54 } 55 if(nums[1][0]==0&&nums[2][0]==0&&nums[3][0]==0&&nums[4][0]==0) break; 56 heartflag=0; 57 for(i=1;i<=4;i++){ 58 heartcount=0; 59 for(j=1;j<=nums[i][0];j++) if(nums[i][j]/100==1) heartcount++; 60 if(heartcount==13) { 61 heartflag=i; 62 break; 63 }else{ 64 if(heartcount) break; 65 } 66 } 67 //judge if someone have all the hearts 68 sdcount=0; 69 for(i=1;i<=4;i++){ 70 if(nums[i][0]==16) { 71 score[i]=1000; 72 continue; 73 } 74 doubleflag=false; 75 for(j=1;j<=nums[i][0];j++){ 76 if(nums[i][j]==410) doubleflag=true; //search for doubelflag 77 } 78 if(heartflag!=i){ 79 for(j=1;j<=nums[i][0];j++){ 80 if(nums[i][j]/100==1) score[i]+=S[nums[i][j]%100]; 81 if(nums[i][j]/100==2) score[i]-=100; 82 if(nums[i][j]/100==3) score[i]+=100; 83 } 84 //if hearts are in different people, count for the score 85 }else{ 86 if(heartflag==i){ 87 score[i]+=200; 88 for(j=1;j<=nums[i][0];j++){ 89 if(nums[i][j]/100==2||nums[i][j]/100==3) sdcount++; 90 } 91 } 92 if(sdcount==2) score[i]+=500; 93 else{ 94 for(j=1;j<=nums[i][0];j++){ 95 if(nums[i][j]/100==2) score[i]-=100; 96 if(nums[i][j]/100==3) score[i]+=100; 97 } 98 } 99 //if all hearts are in the same people , count100 }101 if(doubleflag&&nums[i][0]==1){102 score[i]+=50;103 }else{104 if(doubleflag)score[i]*=2;105 }106 //count for the double107 }108 for(i=1;i<=4;i++) if(score[i]>0) printf("+%d ",score[i]); else printf("%d ",score[i]);109 putchar(10);110 }111 return 0;112 }113 /*114 4 S12 H3 H5 H13115 3 D11 H8 H9116 6 C10 H1 H2 H4 H6 H7117 3 H10 H11 H12118 13 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 119 2 S12 C10120 1 D11121 0122 0123 0124 0125 0126 127 */

 

转载于:https://www.cnblogs.com/linxif2008/p/9691689.html

你可能感兴趣的文章
Centos7 minimal 系列之rabbitmq安装(八)
查看>>
英语语法(2)----点破主谓宾系表三大句型
查看>>
html如何与cgi数据交换,HTML网页与CGI之间通信的 实例分析
查看>>
html如何调用flash插件,htmlflash播放器插件如何播放 网页播放器flash插件怎么解决...
查看>>
mysql数据在html上面显示不出来的,HTML表格不能正确显示MySQL数据
查看>>
数据包和html,数据包和数据报有何区别?
查看>>
jq 异步调用一个html,聊聊如何将jQuery的$.ajax()用于异步HTTP请求
查看>>
html导出excel多sheet,js 导出多sheet表格
查看>>
html日期函数,我所见过的最简短、最灵活的javascript日期转字符串工具函数
查看>>
flann matlab,FLANN 快速的(近似)最近邻开源库
查看>>
pmta linux视频,PowerMTA (PMTA) 的安装和设置方法 – 黄忠 – 博客
查看>>
2016秋季C语言程序设计试题,2016c语言程序设计模拟试题
查看>>
C语言编程初体验 作文,C语言作文件操常用代码
查看>>
rar for android去广告,安卓解压神器RAR v5.30.39 去广告版
查看>>
android p什么变化,Android P预览版,这些调整和变化最值得关注
查看>>
android 7.0宽度432,全球最小的4G手机,比手掌还小,安卓7.0
查看>>
android fragmentstatepageradapter框架,Android FragmentStatePagerAdapter
查看>>
html自适应meta标签,自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结...
查看>>
html怎么加入编辑器,HTML 编辑器
查看>>
python发挥程度_你为什么用 Python?
查看>>