题目链接: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. Markdown 小记

    在学习Markdown之前,对稍有轻微强迫症的我来说,写博客和做笔记是一件很痛苦的事.废话不多说直接来看,偷偷吐槽:不知道咋在博客园配置Markdown,以后如果学会了回来补充. 标题 #hello一 ...

  2. OpenResty之replace-filter-nginx-module

    原文: openresty/replace-filter-nginx-module 1. 概要 location /t { default_type text/html; echo abc; repl ...

  3. IIS/VS IIS Express 添加MIME映射 svg、woff、woff2、json

    出现问题 页面提示 font-awesome/fonts/fontawesome-webfont.woff2?v=4.3.0 Failed to load resource: the server r ...

  4. android studio: 让项目通过阿里云 maven jcenter 下载依赖资源

    打开项目根目录下的 build.gradle(Project:项目名称一级的gradle),如下所示添加阿里 maven 库地址: // Top-level build file where you ...

  5. grub下如何指定哪个分区为根文件系统?

    答: 使用root命令,如: grub> set root=(hd0,msdos1)

  6. IFC数据模型构件控制

    控制ifc构件的隐藏与显示.着色 osg::ref_ptr<osg::Geode> geode1 = new osg::Geode(); osg::ref_ptr<osg::Stat ...

  7. 19 Flutter 自定义AppBar 定义顶部Tab切换 底部Tab结合顶部Tab实现类似头条页面布局(27分36秒)

    Flutter AppBar自定义顶部导航按钮图标.颜色以及TabBar定义顶部Tab切换. leading:在标题前面显示的一个控件,在首页通常显示应用的logo:在其他界面通常显示为付汇按钮. t ...

  8. eclipse spring3.X redis 整合-配置

    花了一天时间折腾redis的配置 用到的jar spring 3.1.1 aopalliance-1.0.jar commons-pool2-2.3.jar jedis-2.7.2.jar sprin ...

  9. shell数组编程

    .数组定义 [chengmo@centos5 ~]$ a=( ) [chengmo@centos5 ~]$ echo $a 一对括号表示是数组,数组元素用“空格”符号分割开. .数组读取与赋值 得到长 ...

  10. ubuntu 18.04下greenplum安装笔记(二)安装Greenplum的失败的尝试

    之前对Linux环境进行了搭建,现在开始进行Greenplum的正式安装. 下载 进Greenplum的官网:https://greenplum.org/download/ 可以发现,对于ubuntu ...