PAT(B) 1018 锤子剪刀布(C:20分,Java:18分)
题目链接: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();
}
}
版权声明:
- 转载请于首页注明链接形式的PAT(B) 1018 锤子剪刀布(C:20分,Java:18分)——wowpH;
- 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
- 如果有疑问欢迎评论留言,尽量解答。
PAT(B) 1018 锤子剪刀布(C:20分,Java:18分)的更多相关文章
- PAT 1018 锤子剪刀布(20)
1018 锤子剪刀布 (20)(20 分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方 ...
- PAT乙级 1018. 锤子剪刀布 (20)
1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...
- PAT 乙级 1018 锤子剪刀布 (20) C++版
1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...
- 【PAT】1018 锤子剪刀布 (20)(20 分)
1018 锤子剪刀布 (20)(20 分) 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算 ...
- PAT Basic 1018 锤子剪刀布 (20 分)
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第 1 行给出正整数 ...
- PAT (Basic Level) Practice 1018 锤子剪刀布 分数 20
大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...
- PAT-乙级-1018. 锤子剪刀布 (20)
1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...
- B1018 锤子剪刀布 (20分)
B1018 锤子剪刀布 (20分) 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势. 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. ...
- PAT (Basic Level) Practise (中文)- 1018. 锤子剪刀布 (20)
http://www.patest.cn/contests/pat-b-practise/1018 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统 ...
随机推荐
- 更加方便的使用git上传自己的代码
经过以上的培训,同学们肯定对git的基本使用没有什么问题了.但是每次代码有更改后,依旧需要 git add * git commit * git 打开vim编辑器,编辑提交信息 或者 git ...
- 2019CSP-S初赛知识点汇总
0x00 基本算法 0x01 位运算 0x02 前缀和与差分 0x03 二分 0x04 倍增 0x05 排序 0x06 离散化 0x07 高精度 0x10 数据结构 0x11 栈和队列 0x12 链表 ...
- 8. String to Integer (atoi) ---Leetcode
Implement atoi to convert a string to an integer. 题目分析: 题目本身很简单就是将一个字符串转化成一个整数,但是由于字符串的千差万别,导致在实现的时候 ...
- centos6和centos7中常用命令区别
以前一直接触的是centos6,最近因为新项目接触到centos7,发现有些命令还是有差异的(从centos7开始使用systemctl来管理服务和程序,包括了service和chkconfig),现 ...
- Mac -- pkg-config: exec: "pkg-config": executable file not found in $PATH
just run: brew install pkg-config
- excel_vlookup函数_python代码实现
python入门经典视频系列教程(免费,2K超清,送书) https://study.163.com/course/courseMain.htm?courseId=1006183019&sha ...
- Bitmap之getPixel和setPixel函数
package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...
- Oracle 表的行数、表占用空间大小,列的非空行数、列占用空间大小 查询
--表名,表占用空间大小(MB),行数select table_name, round(num_rows * avg_row_len /1024/1024, 8) as total_len, num_ ...
- 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_06-课程营销实战分析
课程营销信息包括课程价格.课程有效期等信息. 课程营销信息使用course_market表存储. 接口我们要提供两个. 接口1先查询课程营销的信息,在页面展示. 接口2:叫做更新,如果发现数据不存在就 ...
- iOS 百度地图报私有api的解决方案
1.Build Settings-->搜索other linker Flags-->将other linker Flags设置为-objc 2.用2.1.1的版本的百度地图 3.换高德地图