1018 锤子剪刀布 (20 分)
大家應(yīng)該都會(huì)玩“錘子剪刀布”的游戲:兩人同時(shí)給出手勢(shì),勝負(fù)規(guī)則如圖所示:
現(xiàn)給出兩人的交鋒記錄,請(qǐng)統(tǒng)計(jì)雙方的勝、平、負(fù)次數(shù),并且給出雙方分別出什么手勢(shì)的勝算最大。
輸入格式:
輸入第 1 行給出正整數(shù)?N(≤105),即雙方交鋒的次數(shù)。隨后?N?行,每行給出一次交鋒的信息,即甲、乙雙方同時(shí)給出的的手勢(shì)。C?代表“錘子”、J?代表“剪刀”、B?代表“布”,第 1 個(gè)字母代表甲方,第 2 個(gè)代表乙方,中間有 1 個(gè)空格。
輸出格式:
輸出第 1、2 行分別給出甲、乙的勝、平、負(fù)次數(shù),數(shù)字間以 1 個(gè)空格分隔。第 3 行給出兩個(gè)字母,分別代表甲、乙獲勝次數(shù)最多的手勢(shì),中間有 1 個(gè)空格。如果解不唯一,則輸出按字母序最小的解。
輸入樣例:
10 C J J B C B B B B C C C C B J B B C J J結(jié)尾無(wú)空行
輸出樣例:
5 3 2 2 3 5 B B結(jié)尾無(wú)空行
#include <stdio.h> #pragma warning (disable:4996) int main() {/*1.循環(huán)輸入2.4個(gè)數(shù)組分別通過(guò)條件判斷記錄信息,輸出*/int bookjia[3] = { 0 }, bookyi[3] = { 0 };int book1[500] = { 0 }, book2[500] = { 0 };int N;char jia, yi;scanf("%d", &N);for (int cnt = 0; cnt < N; cnt++) {getchar();scanf("%c %c", &jia, &yi);if (jia == 'C' && yi == 'J') {bookjia[0]++;bookyi[2]++;book1[(int)(jia)]++;}else if (jia == 'C' && yi == 'C') {bookjia[1]++;bookyi[1]++;}else if (jia == 'C' && yi == 'B') {bookjia[2]++;bookyi[0]++;book2[(int)(yi)]++;}else if (jia == 'J' && yi == 'C') {bookjia[2]++;bookyi[0]++;book2[(int)(yi)]++;}else if (jia == 'J' && yi == 'J') {bookjia[1]++;bookyi[1]++;}else if (jia == 'J' && yi == 'B') {bookjia[0]++;bookyi[2]++;book1[(int)(jia)]++;}else if (jia == 'B' && yi == 'C') {bookjia[0]++;bookyi[2]++;book1[(int)(jia)]++;}else if (jia == 'B' && yi == 'B') {bookjia[1]++;bookyi[1]++;}else if (jia == 'B' && yi == 'J') {bookjia[2]++;bookyi[0]++;book2[(int)(yi)]++;}//printf("********\n");}printf("%d %d %d\n", bookjia[0], bookjia[1], bookjia[2]);printf("%d %d %d\n", bookyi[0], bookyi[1], bookyi[2]);int max = (int)'B';for (int cnt = 0; cnt < 500; cnt++) {if (book1[cnt] > book1[max]) {max = cnt;}}printf("%c ", max);max = (int)'B';for (int cnt = 0; cnt < 500; cnt++) {if (book2[cnt] > book2[max]) {max = cnt;}}printf("%c", max);return 0; }?這題其實(shí)不難,就瘋狂寫條件判斷也行;
我踩過(guò)的坑:1.沒(méi)有用getchar(),這題我忘記考慮換行符的影響,因?yàn)?c會(huì)會(huì)將所有緩沖區(qū)中的單個(gè)字符進(jìn)行輸入,也就表明了他是可以吸收換行符的,而我忘記了第一行也有個(gè)換行符,以及每一行輸入后面都有個(gè)換行符,需要我們將每一個(gè)換行符先吸收掉,才可以進(jìn)入scanf的吸收環(huán)節(jié);
2.找兩個(gè)最多贏的手勢(shì)是什么,我這里直接寫了個(gè)簡(jiǎn)單的桶出來(lái),因?yàn)榭紤]到字母序的問(wèn)題,用桶就不用進(jìn)行這一個(gè)判斷,然后我這里桶的條件原來(lái)是寫錯(cuò)的,這里要注意循環(huán)比較的過(guò)程中,條件的比較我這里是數(shù)組內(nèi)的值進(jìn)行比較,我最開(kāi)始寫錯(cuò)了寫成了數(shù)組內(nèi)的元素和max直接比較,導(dǎo)致我錯(cuò)了
總結(jié)
以上是生活随笔為你收集整理的1018 锤子剪刀布 (20 分)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 1017 A除以B (20 分)(c语言
- 下一篇: 王爽汇编第九章学习笔记