标签:
描述
石头-剪刀-布是两个人玩的游戏。假设有两个人A和B,每个人都独立地选择石头,布或剪刀。选布的赢选石头的,选剪刀的赢选布的,选石头的赢选剪刀的,选相同的既不赢又不输。
n个人参加,每个人与其他每个人比k轮石头-布-剪刀游戏,总共最多要赛k*n*(n-1)/2场。你的工作是计算每个人赢的平均数,这个平均数定义为W/(W+L),其中W是赢的场数,而L是输的场数。
输入
输入有多个测试用例。每个测试用例的第一行是n,k(1 ≤ n ≤ 1000 ,1 ≤ k ≤ 10000),n是参加的人数,k是每个人比赛的场数。对每场比赛,由包含四个整数的一行表示:p1,m1,p2,m2.其中1 ≤p1 ≤n,1 ≤p2 ≤n表示比赛的两人,m1,m2分别是他们出的手势(“rock”,“scissors”,或“paper”)。最后以一个0表示输入结束。
输出
对每个参加者各输出一行,给出他们赢的平均场数,结果保留三位小数。如果赢的平均场数不定,则输出“-”。两测试用例间输出一空行。
样例输入
样例输出
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int m, n, i, p1, p2,ying[10005],shu[10005],t=0; 7 char a[10], b[10]; 8 while(cin>>m && m) 9 { 10 cin>>n; 11 if(t) 12 printf("\n"); 13 memset(ying,0,sizeof ying); 14 memset(shu,0,sizeof shu); 15 for(i = 1; i <= m*n/2; i++) 16 { 17 scanf("%d %s %d %s",&p1,a,&p2,b); 18 if(a[0]==b[0]) ; 19 else if(a[0]==‘r‘&&b[0]==‘s‘ || a[0]==‘s‘&&b[0]==‘p‘ ||a[0]==‘p‘&&b[0]==‘r‘) 20 { 21 ying[p1]++; 22 shu[p2]++; 23 } 24 else 25 { 26 ying[p2]++; 27 shu[p1]++; 28 } 29 } 30 for(i = 1; i <= m; i++) 31 { 32 if(ying[i]==0&&shu[i]==0) 33 printf("-\n"); 34 else 35 printf("%.3lf\n",(1.0*ying[i])/(ying[i]+shu[i])); 36 } 37 t++; 38 } 39 return 0; 40 }
标签:
原文地址:http://www.cnblogs.com/jianqian/p/5030897.html