题目链接: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. Tkinter 之Menu菜单标签

    一.参数说明 语法 作用 MenuBar = tk.Menu(window) 创建一个菜单栏 fileBar = tk.Menu(MenuBar, tearoff=0) 创建一个菜单项,不分窗. Me ...

  2. [CSP-S模拟测试]:跳房子(模拟)

    题目描述 跳房子,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一.跳房子是在$N$个格子上进行的,$CYJ$对游戏进行了改进,该成了跳棋盘,改进后的游戏是在一个$N$行$M$列的棋盘上进行,并 ...

  3. 学习OpenCV双目测距原理及常见问题解答

    学习OpenCV双目测距原理及常见问题解答 转自博客:https://blog.csdn.net/angle_cal/article/details/50800775 一. 整体思路和问题转化.  图 ...

  4. GitHub的SSH免密连接

    1.进入当前用户的家目录 $ cd ~ 2.删除.ssh 目录 $ rm -rvf .ssh 3.运行命令生成.ssh 密钥目录 $ ssh-keygen -t rsa -C [GitHub邮箱] [ ...

  5. 微信小程序wx.request的简单封装

    前言 之前写小程序,每次请求后台时都直接调用原生的API,wx.request,每次都要写url,data,回调函数等,正好前段时间,小程序项目需要添加新内容,趁此机会,做一个封装的请求工具,比较简单 ...

  6. 梯度下降法(BGD & SGD & Mini-batch SGD)

    梯度下降法(Gradient Descent) 优化思想:用当前位置的负梯度方向作为搜索方向,亦即为当前位置下降最快的方向,也称“最速下降法”.越接近目标值时,步长越小,下降越慢. 如下图所示,梯度下 ...

  7. java.lang.ClassNotFoundException:org.apache.struts2.dispatcher.FilterDispatcher

    老版本的Struts2升级,启动报的错. org.apache.struts2.dispatcher.FilterDispatcher 是web.xml中对struts2  2.2版本的接入点的类. ...

  8. 基础数据结构 对应 基础api

    <深入理解Redis> mastering redis

  9. 用html+css+js实现一个无限级树形控件

    https://blog.csdn.net/cc_fys/article/details/81284638 树形菜单示例: <!DOCTYPE html> <head> < ...

  10. spring-core-5.0.6.RELEASE-sources.jar中java源代码不全

    笔者最近在调试一段代码,进入spring-core以后,IDEA帮我反编译出源码,其中MethodProxy.java如下 // // Source code recreated from a .cl ...