1018 锤子剪刀布 (20 分)(C++)

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

大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:


image.png


现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。


输入格式:


输入第 1 行给出正整数 N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第 1 个字母代表甲方,第 2 个代表乙方,中间有 1 个空格。


输出格式:


输出第 1、2 行分别给出甲、乙的胜、平、负次数,数字间以 1 个空格分隔。第 3 行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有 1 个空格。如果解不唯一,则输出按字母序最小的解。


输入样例:



1. 10
2. C J
3. J B
4. C B
5. B B
6. B C
7. C C
8. C B
9. J B
10. B C
11. J J


结尾无空行


输出样例:


5 3 2
2 3 5
B B

题目简单,理清思路就好了

#include <iostream>
using namespace std;
struct stj {
  char a;
  char b;
};
int main() {
  int n;
  cin >> n;
  stj sb[n];
  int a1, b1, c1, a2, b2, c2;
  a1 = b1 = c1 = a2 = b2 = c2 = 0;
  int C1, j1, B1, C2, j2, B2;
  C1 = j1 = B1 = C2 = j2 = B2 = 0;
  for (int i = 0; i < sizeof(sb) / sizeof(sb[0]); i++) {
    cin >> sb[i].a >> sb[i].b;
  }
  for (int i = 0; i < sizeof(sb) / sizeof(sb[0]); i++) {
    if (sb[i].a == sb[i].b) {
      b1++;
      b2++;
    } else if ((sb[i].a == 'C' && sb[i].b == 'J') || (sb[i].a == 'J' && sb[i].b == 'B') || (sb[i].a == 'B'
               && sb[i].b == 'C')) {
      a1++;
      c2++;
      if (sb[i].a == 'B')
        B1++;
      if (sb[i].a == 'J')
        j1++;
      if (sb[i].a == 'C')
        C1++;
    } else if ((sb[i].b == 'C' && sb[i].a == 'J') || (sb[i].b == 'J' && sb[i].a == 'B') || (sb[i].b == 'B'
               && sb[i].a == 'C')) {
      a2++;
      c1++;
      if (sb[i].b == 'B')
        B2++;
      if (sb[i].b == 'J')
        j2++;
      if (sb[i].b == 'C')
        C2++;
    }
  }
  printf("%d %d %d\n", a1, b1, c1);
  printf("%d %d %d\n", a2, b2, c2);
  int max1 = (C1 > j1) ? C1 : j1;
  max1 = (max1 > B1) ? max1 : B1;
  int max2 = (C2 > j2) ? C2 : j2;
  max2 = (max2 > B2) ? max2 : B2;
  if (max1 == B1)
    printf("%c ", 'B');
  if (max1 == C1 && max1 != B1)
    printf("%c ", 'C');
  if (max1 == j1 && max1 != B1 && max1 != C1)
    printf("%c ", 'J');
  if (max2 == B2)
    printf("%c", 'B');
  if (max2 == C2 && max2 != B2)
    printf("%c", 'C');
  if (max2 == j2 && max2 != B2 && max2 != C2)
    printf("%c", 'J');
}


相关文章
|
安全 Android开发
夜神模拟器 安卓7.0 burp抓包 https流量
夜神模拟器 安卓7.0 burp抓包 https流量
899 0
|
数据安全/隐私保护
vscode访问和编辑远程服务器文件
vscode访问和编辑远程服务器文件
360 0
vscode访问和编辑远程服务器文件
|
12月前
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
477 5
Mysql(3)—数据库相关概念及工作原理
|
12月前
Threejs播放模型自带动画
这篇文章介绍了在Three.js中如何播放带有预设动作的模型动画,并特别提到了如何设置动画循环模式以实现一次性播放效果。
348 3
Threejs播放模型自带动画
|
数据安全/隐私保护 iOS开发 MacOS
Mac安装Navicat Premium 16.3.5
Mac安装Navicat Premium 16.3.5
619 3
|
10月前
|
人工智能 并行计算 程序员
【AI系统】SIMD & SIMT 与芯片架构
本文深入解析了SIMD(单指令多数据)与SIMT(单指令多线程)的计算本质及其在AI芯片中的应用,特别是NVIDIA CUDA如何实现这两种计算模式。SIMD通过单指令对多个数据进行操作,提高数据并行处理能力;而SIMT则在GPU上实现了多线程并行,每个线程独立执行相同指令,增强了灵活性和性能。文章详细探讨了两者的硬件结构、编程模型及硬件执行模型的区别与联系,为理解现代AI计算架构提供了理论基础。
1325 12
|
12月前
|
小程序 前端开发 数据库
上门服务的开发基本逻辑流程。
在数字化时代,上门服务小程序成为连接消费者与服务提供者的桥梁。本文深入探讨其前后端设计、开发与维护:前端注重响应式布局、清晰导航及丰富交互,提升用户体验;后端则通过微服务架构、数据库设计及业务逻辑实现,确保系统高效稳定。团队协作与持续优化贯穿整个流程,旨在打造优质服务体验。
|
存储 人工智能 缓存
大模型压缩量化方案怎么选?无问芯穹Qllm-Eval量化方案全面评估:多模型、多参数、多维度
【6月更文挑战第26天】无问芯穹Qllm-Eval评估了11个大模型(如OPT、LLaMA2)在多种参数配置和任务下的量化效果,探索权重量化、激活量化等方法对性能、速度和内存的影响。研究发现,W4、W4A8量化通常保持在2%的性能损失范围内,但最佳策略取决于模型大小、任务类型及硬件,提示了选择压缩方案时需灵活适应。[[arxiv.org/pdf/2402.18158.pdf](https://arxiv.org/pdf/2402.18158.pdf)]
323 6
|
算法 安全 Java
技术笔记:MD5加密算法详解
技术笔记:MD5加密算法详解
|
前端开发 JavaScript 安全
使用JavaScript实现动态表单验证(上)
使用JavaScript实现动态表单验证