您好,欢迎来到刀刀网。
搜索
您的当前位置:首页HDU1148 Rock-Paper-Scissors Tournament

HDU1148 Rock-Paper-Scissors Tournament

来源:刀刀网

Rock-Paper-Scissors Tournament

                                                      Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)


                                                      Total Submission(s): 2218    Accepted Submission(s): 718


Problem Description
Rock-Paper-Scissors is game for two players, A and B, who each choose, independently of the other, one of rock, paper, or scissors. A player chosing paper wins over a player chosing rock; a player chosing scissors wins over a player chosing paper; a player chosing rock wins over a player chosing scissors. A player chosing the same thing as the other player neither wins nor loses. 
A tournament has been organized in which each of n players plays k rock-scissors-paper games with each of the other players - k games in total. Your job is to compute the win average for each player, defined as w / (w + l) where w is the number of games won, and l is the number of games lost, by the player. 
 

Input
Input consists of several test cases. The first line of input for each case contains 1 ≤ n ≤ 100 1 ≤ k ≤ 100 as defined above. For each game, a line follows containing p1, m1, p2, m2. 1 ≤ p1 ≤ n and 1 ≤ p2 ≤ n are distinct integers identifying two players; m1 and m2 are their respective moves ("rock", "scissors", or "paper"). A line containing 0 follows the last test case. 
 

Output
Output one line each for player 1, player 2, and so on, through player n, giving the player's win average rounded to three decimal places. If the win average is undefined, output "-". Output an empty line between cases. 
 

Sample Input
  
  
2 4 1 rock 2 paper 1 scissors 2 paper 1 rock 2 rock 2 rock 1 scissors 2 1 1 rock 2 paper 0
 

Sample Output
  
  
0.333 0.667 0.000 1.000
 

Source

这个题的大意就是:有m个人比赛石头剪刀布,不用说这个游戏的比赛规则大家都知道,共有n场比赛,最后求出这m个人胜率分别是多少并输出。

第一种解法:
#include<stdio.h>
#include<string.h>
int main()
{
    int n;
    int a[105],aa[105],t[105],tt[105];
    char b[105][10],bb[105][10];
    double d[105];
    int l=0;
    while(scanf("%d",&n),n!=0)
    {
        if(l!=0)
        printf("\n");
        l++;
        memset(tt,0,sizeof(tt));
        memset(t,0,sizeof(t));
        int k,i;
        scanf("%d",&k);
        for(i=0;i<k;i++)
        {
            scanf("%d %s %d %s",&a[i],b[i],&aa[i],bb[i]);
            t[a[i]]++;
            t[aa[i]]++;
            if(strcmp(b[i],"rock")==0&&strcmp(bb[i],"rock")==0||strcmp(b[i],"paper")==0&&strcmp(bb[i],"paper")==0||strcmp(b[i],"scissors")==0&&strcmp(bb[i],"scissors")==0)
            {
                t[a[i]]--;
                t[aa[i]]--;
            }
            if(strcmp(b[i],"rock")==0&&strcmp(bb[i],"paper")==0)
                tt[aa[i]]++;
            if(strcmp(b[i],"rock")==0&&strcmp(bb[i],"scissors")==0)
                tt[a[i]]++;
            if(strcmp(b[i],"paper")==0&&strcmp(bb[i],"rock")==0)
                tt[a[i]]++;
            if(strcmp(b[i],"paper")==0&&strcmp(bb[i],"scissors")==0)
                tt[aa[i]]++;
            if(strcmp(b[i],"scissors")==0&&strcmp(bb[i],"rock")==0)
                tt[aa[i]]++;
            if(strcmp(b[i],"scissors")==0&&strcmp(bb[i],"paper")==0)
                tt[a[i]]++;
        }
        for(i=1;i<=n;i++)
        {
            if(tt[i]==0&&t[i]==0)
            printf("-\n");
           else
           {
               d[i]=(double)tt[i]/t[i];
               printf("%.3lf\n",d[i]);
           }
        }

    }
    return 0;
}
第二种解法:
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
struct player
{
    int total;
    int win;
    double x;
};
int main()
{
    int m,n,i,flag=0,l=0;
    player t[105];
    while(cin>>m,m!=0)
    {
        if(l!=0)
            cout<<endl;
        l++;
        for(i=0;i<=m;i++)
        {
            t[i].total=0;
            t[i].win=0;
        }
        int i,j,a1,a2;
        string b1,b2;
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>a1>>b1>>a2>>b2;
            if(b1!=b2)
            {
                t[a1].total++;
                t[a2].total++;
            }
            if(b1=="rock"&&b2=="paper")
                t[a2].win++;
            else if(b1=="rock"&&b2=="scissors")
                t[a1].win++;
            else if(b1=="paper"&&b2=="rock")
                t[a1].win++;
            else if(b1=="paper"&&b2=="scissors")
                t[a2].win++;
            else if(b1=="scissors"&&b2=="rock")
                t[a2].win++;
            else if(b1=="scissors"&&b2=="paper")
                t[a1].win++;
        }
        for(i=1;i<=m;i++)
        {
            //cout<<t[i].total<<" "<<t[i].win<<endl;
            if(t[i].total==0)
                cout<<"-"<<endl;
            else
            {
                t[i].x=t[i].win*1.0/t[i].total;
                printf("%.3lf\n",t[i].x);
            }
        }
    }
    return 0;
}



因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务