PAT (Basic Level) Practise (中文) 1018. 锤子剪刀布 (20)
2017-08-30 14:49
459 查看
1018. 锤子剪刀布 (20)
时间限制100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:
现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第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 //java一直超时,我测得答案都没问题
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input=new Scanner(System.in); int n=input.nextInt(); int count[]=new int[3]; String pk_a[]=new String ; String pk_b[]=new String ; int win_words_a[]=new int[3]; int win_words_b[]=new int[3]; for (int i = 0; i < n; i++) { pk_a[i]=input.next(); pk_b[i]=input.next(); } for (int i = 0; i < n; i++) { if (pk_a[i].equals("C")&&pk_b[i].equals("J") ||pk_a[i].equals("J")&&pk_b[i].equals("B") ||pk_a[i].equals("B")&&pk_b[i].equals("C") ) { count[0]++; if (pk_a[i].equals("C")) { win_words_a[1]++; }else if (pk_a[i].equals("J")) ccbb { win_words_a[2]++; }else if (pk_a[i].equals("B")) { win_words_a[0]++; } } if (pk_b[i].equals("C")&&pk_a[i].equals("J") ||pk_b[i].equals("J")&&pk_a[i].equals("B") ||pk_b[i].equals("B")&&pk_a[i].equals("C") ) { if (pk_b[i].equals("C")) { win_words_b[1]++; }else if (pk_b[i].equals("J")) { win_words_b[2]++; }else if (pk_b[i].equals("B")) { win_words_b[0]++; } } if (pk_a[i].equals(pk_b[i])) { count[1]++; } } int max_a=Math.max(Math.max(win_words_a[0], win_words_a[1]), win_words_a[2]); int max_b=Math.max(Math.max(win_words_b[0], win_words_b[1]), win_words_b[2]); count[2]=n-count[0]-count[1]; System.out.println(count[0]+" "+count[1]+" "+count[2]); System.out.println(count[2]+" "+count[1]+" "+count[0]); for (int i = 0; i < win_words_a.length; i++) { if (max_a==win_words_a[i]) { if (i==0) { System.out.print("B "); }else if (i==1) { System.out.print("C "); }else if (i==2) { System.out.print("J "); } break; } } for (int i = 0; i < win_words_b.length; i++) { if (max_b==win_words_b[i]) { if (i==0) { System.out.print("B"); }else if (i==1) { System.out.print("C"); }else if (i==2) { System.out.print("J"); } break; } } } } //这个c算法很简洁,是别人博客看到的,出处忘了。。。借鉴一下
#include <cstdio> int main(){ int n,s=0,f=0,p=0,ac=0,aj=0,ab=0,bc=0,bj=0,bb=0; char a[2],b[2]; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%s%s",a,b); if((a[0]=='C'&&b[0]=='J')||(a[0]=='J'&&b[0]=='B')||(a[0]=='B'&&b[0]=='C')){ //a胜利的情况 s++; if(a[0]=='C')ac++; if(a[0]=='B')ab++; if(a[0]=='J')aj++; } else if((a[0]=='C'&&b[0]=='C')||(a[0]=='J'&&b[0]=='J')||(a[0]=='B'&&b[0]=='B')){ //平局 p++; }else { //a输了 f++; if(b[0]=='C')bc++; if(b[0]=='B')bb++; if(b[0]=='J')bj++; } } printf("%d %d %d\n%d %d %d\n",s,p,f,f,p,s); printf("%c %c",((ac>ab&&ac>=aj)?'C':(ab>=aj?'B':'J')),(bc>bb&&bc>=bj)?'C':(bb>=bj?'B':'J')); return 0; }
相关文章推荐
- PAT (Basic Level) Practise (中文)- 1018. 锤子剪刀布 (20)
- PAT (Basic Level) Practise (中文)1018. 锤子剪刀布 (20)
- PAT (Basic Level) Practise (中文)1018. 锤子剪刀布 (20)
- PAT (Basic Level) Practise (中文)1018. 锤子剪刀布 (20)
- PAT (Basic Level) Practise (中文)1007. 素数对猜想 (20) C语言
- PAT (Basic Level) Practise (中文) 1074. 宇宙无敌加法器(20)
- PAT (Basic Level) Practise (中文)1039. 到底买不买(20)
- PAT (Basic Level) Practise (中文)-1037. 在霍格沃茨找零钱(20)
- PAT (Basic Level) Practise (中文) 1004成绩排名(20)
- PAT (Basic Level) Practise (中文) 1019. 数字黑洞 (20)
- PAT (Basic Level) Practise (中文) 1029. 旧键盘(20)
- PAT (Basic Level) Practise (中文) 1033. 旧键盘打字(20)
- PAT (Basic Level) Practise (中文)1004. 成绩排名 (20)
- 【PAT】(Basic Level) Practise (中文)1029. 旧键盘(20)
- PAT (Basic Level) Practise (中文)1022. D进制的A+B (20)
- PAT (Basic Level) Practise (中文) 1058. 选择题(20)
- PAT (Basic Level) Practise (中文) 1069. 微博转发抽奖(20)
- PAT (Basic Level) Practise (中文)1008. 数组元素循环右移问题 (20)
- PAT (Basic Level) Practise (中文)1008. 数组元素循环右移问题 (20) C语言
- PAT (Basic Level) Practise (中文)1039. 到底买不买(20) C语言