锤子剪刀布 (20)
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。
输出格式:
输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。
输入样例:10 C J J B C B B B B C C C C B J B B C J J输出样例:
5 3 2 2 3 5 B B
分析:
这个题目很简单,所以随便写了写···结果居然运行!超时!word 天~还是要稍微注意一下性能的~~
using System;
namespace PAT
{
class Program
{
static void Main(string[] args)
{
Person A = new Person();
Person B = new Person();
int tryTimes = int.Parse(Console.ReadLine());
for(int i = 0; i < tryTimes; i++)
{
HaveAGame(A, B);
}
string AWinMost = FindMostWin(A);
string BWinMost = FindMostWin(B);
int AWin = A.bWin + A.cWin + A.jWin;
int BWin = B.bWin + B.cWin + B.jWin;
Console.WriteLine("{0} {1} {2}", AWin, tryTimes - AWin - A.lose, A.lose);
Console.WriteLine("{0} {1} {2}", BWin, tryTimes - BWin - B.lose, B.lose);
Console.Write("{0} {1}", AWinMost, BWinMost);
}
static void HaveAGame(Person A, Person B)
{
string[] result = Console.ReadLine().Split(' ');
char chA = char.Parse(result[0]);
char chB = char.Parse(result[1]);
if(chA == 'B')
{
if (chB == 'C')
{
A.bWin++;
B.lose++;
}
else if (chB == 'J')
{
B.jWin++;
A.lose++;
}
}
else if(chA == 'C')
{
if (chB == 'B')
{
B.bWin++;
A.lose++;
}
else if (chB == 'J')
{
A.cWin++;
B.lose++;
}
}
else
{
if(chB == 'B')
{
A.jWin++;
B.lose++;
}
else if(chB == 'C')
{
B.cWin++;
A.lose++;
}
}
}
static string FindMostWin(Person person)
{
int mostWin = person.bWin;
string mostName = "B";
if (person.cWin > mostWin)
{
mostWin = person.cWin;
mostName = "C";
}
if (person.jWin > mostWin)
{
mostWin = person.jWin;
mostName = "J";
}
return mostName;
}
}
class Person
{
public int bWin;
public int cWin;
public int jWin;
public int lose;
}
}