题意:n个人两两玩剪刀石头布的游戏,每个人玩k次,求最后每个人的胜利次数/(胜利次数+失败次数)
题解:细心一点就没什么问题了。

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int win[105],lose[105]; 6 int comp(char s1[],char s2[]) 7 { 8 switch(s1[0]) 9 { 10 case 'r': 11 switch(s2[0]) 12 { 13 case 'r': 14 return 0; 15 case 'p': 16 return -1; 17 case 's': 18 return 1; 19 } 20 break; 21 case 'p': 22 switch(s2[0]) 23 { 24 case 'r': 25 return 1; 26 case 'p': 27 return 0; 28 case 's': 29 return -1; 30 } 31 break; 32 case 's': 33 switch(s2[0]) 34 { 35 case 'r': 36 return -1; 37 case 'p': 38 return 1; 39 case 's': 40 return 0; 41 } 42 } 43 } 44 int main() 45 { 46 int n,k; 47 bool first=true; 48 while(scanf("%d%d",&n,&k)!=EOF,n) 49 { 50 memset(win,0,sizeof(win)); 51 memset(lose,0,sizeof(lose)); 52 if(first) 53 first=false; 54 else 55 printf("\n"); 56 int all=k*n*(n-1)/2; 57 for(int i=0; i<all; i++) 58 { 59 int a,b,c; 60 char s1[10],s2[10]; 61 scanf("%d%s%d%s",&a,s1,&b,s2); 62 c=comp(s1,s2); 63 if(c==1) 64 win[a]++,lose[b]++; 65 else if(c==-1) 66 win[b]++,lose[a]++; 67 } 68 for(int i=1;i<=n;i++) 69 { 70 if(win[i]+lose[i]==0) 71 printf("-\n"); 72 else 73 printf("%.3lf\n",(double)(win[i])/(double)(win[i]+lose[i])); 74 } 75 } 76 return 0; 77 }