题目链接:1018 锤子剪刀布
分析
  • 用一个二维数组保存两人所有回合的手势
  • 甲乙的胜,平,负的次数刚好相反,用3个变量表示就可以
  • 手势单独保存在signs[3]中,注意顺序。题目原文:如果解不唯一,则输出按字母序最小的解。
  • 注意input()中的getchar()不能省略
C
/**
* Score 20
* Run Time 25ms
* @author wowpH
* @version 4.2
*/ #include<stdio.h>
#include<stdlib.h> int n; //交锋次数
char** sign; //甲乙的手势,sign[n][2] //甲胜的次数,甲平的次数,甲负的次数
int winJia, levelJia, loseJia; // B C J
// 甲
// 乙
int numSignWin[2][3] = { 0 }; //出手势胜的次数 //手势
char signs[3] = { 'B','C','J' }; void input() {
scanf("%d", &n);
sign = (char**)malloc(n * sizeof(char*));
for (int i = 0; i < n; i++) {
sign[i] = (char*)malloc(2 * sizeof(char)); //申请内存
}
for (int i = 0; i < n; i++) {
getchar(); //获取换行符
scanf("%c %c", &sign[i][0], &sign[i][1]); //第i回合甲乙的手势
}
} void judge(char jia, char yi) {
if (jia == yi) { //平
levelJia++;
}
else if (jia == signs[0] && yi == signs[1]) { //甲 布 胜
winJia++; //甲胜,次数加1
numSignWin[0][0]++; //对照表格
}
else if (jia == signs[0] && yi == signs[2]) { //乙 剪刀 胜
loseJia++;
numSignWin[1][2]++;
}
else if (jia == signs[1] && yi == signs[0]) { //乙 布 胜
loseJia++;
numSignWin[1][0]++;
}
else if (jia == signs[1] && yi == signs[2]) { //甲 石头 胜
winJia++;
numSignWin[0][1]++;
}
else if (jia == signs[2] && yi == signs[0]) { //甲 剪刀 胜
winJia++;
numSignWin[0][2]++;
}
else if (jia == signs[2] && yi == signs[1]) { //乙 石头 胜
loseJia++;
numSignWin[1][1]++;
}
} //获取who赢的最多的手势在signs中的下标
int maxIndex(int who) {
int max = numSignWin[who][0];
int index = 0;
for (int i = 0; i < 3; i++) {
if (max < numSignWin[who][i]) {
max = numSignWin[who][i];
index = i;
}
}
return index;
} void output() {
printf("%d %d %d\n", winJia, levelJia, loseJia);
printf("%d %d %d\n", loseJia, levelJia, winJia);
printf("%c ", signs[maxIndex(0)]); //输出甲赢的最多的手势
printf("%c\n", signs[maxIndex(1)]); //输出乙赢的最多的手势
} int main() {
input(); //输入
winJia = levelJia = loseJia = 0;
for (int i = 0; i < n; i++) {
judge(sign[i][0], sign[i][1]); //判断第i回合胜负
}
output();//输出
return 0;
}
Java
/**
* Score 18
* Run Time 117ms
* @author wowpH
* @version 1.0
*/ import java.util.Scanner; public class Main {
private int n;// 交锋次数
// 甲和乙的手势
private char[][] sign;
// 甲胜的次数,甲平的次数,甲负的次数
private int winJia, levelJia, loseJia;
// 布 石头 剪刀
//甲
private int[] numSignWinJia = new int[3];
// 布 石头 剪刀
//乙
private int[] numSignWinYi = new int[3];
private char[] signs = { 'B', 'C', 'J' }; public Main() {
input();
for (int i = 0; i < n; i++) {
judge(sign[i][0], sign[i][1]);
}
output();
} private void input() {
// 输入数据
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
sign = new char[n][2];
for (int i = 0; i < n; i++) {
sign[i][0] = sc.next().charAt(0);
sign[i][1] = sc.next().charAt(0);
}
sc.close();
} private void judge(char jia, char yi) {
if (jia == yi) {// 平
levelJia++;
} else if ('C' == jia && 'J' == yi) {// 甲出石头胜
numSignWinJia[1]++;
winJia++;
} else if ('C' == jia && 'B' == yi) {// 乙出布胜
numSignWinYi[0]++;
loseJia++;
} else if ('J' == jia && 'C' == yi) {// 乙出石头胜
numSignWinYi[1]++;
loseJia++;
} else if ('J' == jia && 'B' == yi) {// 甲出剪刀胜
numSignWinJia[2]++;
winJia++;
} else if ('B' == jia && 'C' == yi) {// 甲出布胜
numSignWinJia[0]++;
winJia++;
} else if ('B' == jia && 'J' == yi) {// 乙出剪刀胜
numSignWinYi[2]++;
loseJia++;
}
} private void output() {
System.out.println(winJia + " " + levelJia + " " + loseJia);
System.out.println(loseJia + " " + levelJia + " " + winJia);
System.out.print(signs[maxIndex(numSignWinJia)]);
System.out.print(" ");
System.out.println(signs[maxIndex(numSignWinYi)]);
} private int maxIndex(int[] num) {
int index = 0;
int max = num[0];
for (int i = 1; i < 3; i++) {
if (max < num[i]) {
max = num[i];
index = i;
}
}
return index;
} public static void main(String[] args) {
new Main();
}
}

版权声明:

  1. 转载请于首页注明链接形式的PAT(B) 1018 锤子剪刀布(C:20分,Java:18分)——wowpH
  2. 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
  3. 如果有疑问欢迎评论留言,尽量解答。

PAT(B) 1018 锤子剪刀布(C:20分,Java:18分)的更多相关文章

  1. PAT 1018 锤子剪刀布(20)

    1018 锤子剪刀布 (20)(20 分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方 ...

  2. PAT乙级 1018. 锤子剪刀布 (20)

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  3. PAT 乙级 1018 锤子剪刀布 (20) C++版

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  4. 【PAT】1018 锤子剪刀布 (20)(20 分)

    1018 锤子剪刀布 (20)(20 分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算 ...

  5. PAT Basic 1018 锤子剪刀布 (20 分)

    大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第 1 行给出正整数 ...

  6. PAT (Basic Level) Practice 1018 锤子剪刀布 分数 20

    大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...

  7. PAT-乙级-1018. 锤子剪刀布 (20)

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  8. B1018 锤子剪刀布 (20分)

    B1018 锤子剪刀布 (20分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势. 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. ...

  9. PAT (Basic Level) Practise (中文)- 1018. 锤子剪刀布 (20)

    http://www.patest.cn/contests/pat-b-practise/1018 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统 ...

随机推荐

  1. C#读写三菱PLC数据 使用TCP/IP 协议

    本文将使用一个Github开源的组件库技术来读写三菱PLC和西门子plc数据,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能 ...

  2. 深入理解JVM虚拟机1:JVM内存的结构与永久代的消失

    所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能问题,那么这些问 ...

  3. RESTful入门

    RESTful入门 1. REST简介 和RPC一样,都是目前比较主流的URL链接风格,也可以说是web服务的一种架构风格.REST全称Representational State Transfer, ...

  4. windows2012域控

    此次主要是使用服务器搭建域控制器,我主要是用于使用office web apps 和office online server搭建在线Word预览编辑! 一.准备工作 首先准备1台比较干净的服务器,推荐 ...

  5. IOS APP开发入门案例

    1.创建新项目 2.设计布局,main.storyboard中,在控件库中 3.布局控件关联控制器 4.设置事件或者显示模式 5.编写代码: import UIKit class ViewContro ...

  6. ISO/IEC 9899:2011 条款5——5.2.4 环境限制

    5.2.4 环境限制 1.翻译与执行环境都约束了语言翻译器和库的实现.下面概述了对一个顺应标准实现的语言相关的环境限制:库相关的限制在条款7中讨论. 5.2.4.1 翻译限制 1.实现应该能够翻译并执 ...

  7. ubuntu下编译和使用libxml2

    安装: #sudo apt-get install libxml2 #sudo apt-get install libxml2-dev sudo apt-get install libxml2-dev ...

  8. Qt编写控件属性设计器7-串口采集

    一.前言 数据源是组态软件的核心灵魂,少了数据源,组态就是个花架子没卵用,一般数据源有三种方式获取,串口.网络.数据库,至于数据规则是什么,这个用户自己指定,本设计器全部采用第一个字节作为数据来演示. ...

  9. Node.js event loop 和 JS 浏览器环境下的事件循环的区别

    Node.js  event loop 和 JS 浏览器环境下的事件循环的区别: 1.线程与进程: JS 是单线程执行的,指的是一个进程里只有一个主线程,那到底什么是线程?什么是进程? 进程是 CPU ...

  10. python2.6.6升级python2.7.14

    Centos 6.8系统镜像默认安装的 python 环境是 2.6.6,线上需求需要升级到 2.7.14 版本,网上找了相关资料,升级 python 版本比较容易,但 yum/pip 等命令的使用也 ...