生活随笔
收集整理的這篇文章主要介紹了
牛客网_PAT乙级1008_锤子剪刀布 (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
代碼
第一次用C++做題,感受到了面向對象思想的妙處
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<stdlib.h>
int i
;
class People
{
public
:int cur
= 0;int win
= 0;int loose
= 0;int equal
= 0;int winbecauseof_J
= 0;int winbecauseof_B
= 0;int winbecauseof_C
= 0;char a
[105] = { 0 };int play(int total
);
};
class Checker
{
public
:int cur_ckr
= 0;int check(People
*jia
, People
*yi
, int total
);
};
int People
::play(int cur
)
{std
::cin
>> this
->a
[cur
];cur
++;return cur
;
}
int Checker
::check(People
*jia
, People
*yi
, int total
)
{for (cur_ckr
= 0; cur_ckr
< total
; cur_ckr
++){if (jia
->a
[cur_ckr
] == yi
->a
[cur_ckr
]){jia
->equal
++;yi
->equal
++;}else if ((jia
->a
[cur_ckr
] == 'J'&& yi
->a
[cur_ckr
] == 'B') || (jia
->a
[cur_ckr
] == 'B'&& yi
->a
[cur_ckr
] == 'C') || (jia
->a
[cur_ckr
] == 'C'&& yi
->a
[cur_ckr
] == 'J')){jia
->win
++;yi
->loose
++;switch (jia
->a
[cur_ckr
]){case'J':jia
->winbecauseof_J
++; break;case'B':jia
->winbecauseof_B
++; break;case'C':jia
->winbecauseof_C
++; break;}}else if ((jia
->a
[cur_ckr
] == 'B'&& yi
->a
[cur_ckr
] == 'J') || (jia
->a
[cur_ckr
] == 'C'&& yi
->a
[cur_ckr
] == 'B') || (jia
->a
[cur_ckr
] == 'J'&& yi
->a
[cur_ckr
] == 'C')){jia
->loose
++;yi
->win
++;switch (yi
->a
[cur_ckr
]){case'J':yi
->winbecauseof_J
++; break;case'B':yi
->winbecauseof_B
++; break;case'C':yi
->winbecauseof_C
++; break;}}else return -1;}return 0;
}
class Printer
{
public
:void print_num(People
*jia
, People
*yi
){std
::cout
<< jia
->win
<< " " << jia
->equal
<< " " << jia
->loose
<< std
::endl
;std
::cout
<< yi
->win
<< " " << yi
->equal
<< " " << yi
->loose
<< std
::endl
;}void print_char(People
*jia
, People
*yi
){if (jia
->winbecauseof_J
> jia
->winbecauseof_C
&& jia
->winbecauseof_J
> jia
->winbecauseof_B
){std
::cout
<< "J ";}else if (jia
->winbecauseof_C
> jia
->winbecauseof_J
&& jia
->winbecauseof_C
> jia
->winbecauseof_B
){std
::cout
<< "C ";}else if (jia
->winbecauseof_B
> jia
->winbecauseof_C
&& jia
->winbecauseof_B
> jia
->winbecauseof_J
){std
::cout
<< "B ";}else if (jia
->winbecauseof_J
== jia
->winbecauseof_B
== jia
->winbecauseof_C
){std
::cout
<< "B ";}else if (jia
->winbecauseof_J
== jia
->winbecauseof_B
|| jia
->winbecauseof_B
== jia
->winbecauseof_C
){std
::cout
<< "B ";}else if (jia
->winbecauseof_J
== jia
->winbecauseof_C
){std
::cout
<< "C ";}if (yi
->winbecauseof_J
> yi
->winbecauseof_C
&& yi
->winbecauseof_J
> yi
->winbecauseof_B
){std
::cout
<< "J";}else if (yi
->winbecauseof_C
> yi
->winbecauseof_J
&& yi
->winbecauseof_C
> yi
->winbecauseof_B
){std
::cout
<< "C";}else if (yi
->winbecauseof_B
> yi
->winbecauseof_C
&& yi
->winbecauseof_B
> yi
->winbecauseof_J
){std
::cout
<< "B";}else if (yi
->winbecauseof_J
== yi
->winbecauseof_B
== yi
->winbecauseof_C
){std
::cout
<< "B";}else if (yi
->winbecauseof_J
== yi
->winbecauseof_B
|| yi
->winbecauseof_B
== yi
->winbecauseof_C
){std
::cout
<< "B";}else if (yi
->winbecauseof_J
== yi
->winbecauseof_C
){std
::cout
<< "C";}std
::cout
<< std
::endl
;}
};
int main()
{int total
;std
::cin
>> total
;int checkok
;People jia
;People yi
;Checker checker
;for (i
= 0; i
< 2 * total
; i
++){if (i
% 2 == 0){jia
.cur
= jia
.play(jia
.cur
);}else yi
.cur
= yi
.play(yi
.cur
);}checkok
= checker
.check(&jia
, &yi
, total
);if (checkok
== -1){std
::cout
<< "Oh NO! checker出現一點小問題,原因可能是你輸入的字母不對" << std
::endl
;}Printer printer
;printer
.print_num(&jia
, &yi
);printer
.print_char(&jia
, &yi
);system("pause");
}
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的牛客网_PAT乙级1008_锤子剪刀布 (20)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。