zoukankan      html  css  js  c++  java
  • HDU 1148 Rock-Paper-Scissors Tournament (模拟)

    题目链接

    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
    

    分析:

    n个人进行k局比赛,但每局只有两个人能够进行比赛,最后输出来一个人获胜的总概率(即这个人胜利的局数除以他总共参加比赛的局数),如果一个人一次比赛也没有参加,则输出来一个"-"

    代码:

    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int main()
    {
        int n,k,op=0;
        while(~scanf("%d",&n)&&n!=0)
        {
            op++;
            scanf("%d",&k);
            int i,j;
            int sum[105][105]= {0};
            for(i=1; i<=k; i++)
            {
                int a,b;
                char ch1[10],ch2[10];
                scanf("%d%s%d%s",&a,ch1,&b,ch2);
                if((ch1[0]=='p'&&ch2[0]=='r')||(ch1[0]=='s'&&ch2[0]=='p')||(ch1[0]=='r'&&ch2[0]=='s'))///第一个人赢
                    sum[a][b]++;
                else if((ch1[0]=='r'&&ch2[0]=='p')||(ch1[0]=='p'&&ch2[0]=='s')||(ch1[0]=='s'&&ch2[0]=='r'))///第二个人赢
                    sum[b][a]++;
            }
            if(op!=1)
                printf("
    ");
            double sum1,sum2,pj;
            for(i=1; i<=n; i++)
            {
                sum1=0.0;
                sum2=0.0;
                for(j=1; j<=n; j++)
                {
                    if(sum[i][j]!=0||sum[j][i]!=0)///两个人之间有进行比赛
                    {
                        sum1+=sum[i][j];
                        sum2+=sum[j][i];
                    }
                }
                
                if(sum1==0&&sum2==0)///表示一个人一次比赛也没有参加
                    printf("-
    ");
                else
                {
                    pj=(double(sum1)/double(sum1+sum2));
                    printf("%.3lf
    ",pj);
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    shell 去除utf8文件中bom头的方法
    bad interpreter:No such file or directory
    桥接配置虚拟机网络
    coreseek因为重启遇到的问题
    监听微信内置浏览器 返回点击事件
    phpredis 扩展装完后,重启php不生效的原因之一
    linux上ThinkPHP中原本正常的css,js文件找不到的解决方式
    vps
    java基础-《JAVA语言程序设计与数据结构》笔记
    面经问题总结——django相关
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6763873.html
Copyright © 2011-2022 走看看