C++称硬币(枚举)

2023-11-01

有12枚硬币。其中有11枚真币和1枚假币。假币和真币重量不同,但不知道假币比真币轻还是重。现在,用一架天平称了这些币三次,告诉你称的结果,请你找出假币并且确定假币是轻是重(数据保证一定能找出来)。 

输入
第一行是测试数据组数。
每组数据有三行,每行表示一次称量的结果。银币标号为A-L。每次称量的结果用三个以空格隔开的字符串表示:天平左边放置的硬币、天平右边放置的硬币、平衡状态。其中平衡状态用``up'', ``down'', 或 ``even''表示, 分别为右端高、右端低和平衡。天平左右的硬币数总是相等的。 

输出
输出哪一个标号的银币是假币,并说明它比真币轻还是重 。

输入样例
1
ABCD EFGH even
ABCI EFJK up
ABIJ EFGH even
输出样例
K is the counterfeit coin and it is light. 

解题思路

来源:北大郭炜老师

对于每一枚硬币先假设它是轻的,看这样是否符合称量结果。如果符合,问题即解决。如果不符合,就假设它是重的,看是否符合称量结果。

把所有硬币都试一遍,一定能找到特殊硬币。 

#include <iostream>
#include <cstring>
using namespace std;
char Left[3][7];   //天平左边硬币
char Right[3][7];  //天平右边硬币
char result[3][7]; //称量结果
bool IsFake(char c,bool light);//light为真表示假设假币为轻,否则表示假设假币为重
int main()
{
    int t;
    cin >> t;
    while(t--) 
    {
        for(int i = 0;i < 3; ++i)   cin >> Left[i] >> Right[i] >> result[i];
        for(char c='A'; c<='L';c++)
        {
            if( IsFake(c,true) )//假设c这个硬币为假硬币而且它比真硬币轻
            {
                cout << c << " is the counterfeit coin and it is light.\n";
                break;
            }
            else if( IsFake(c,false) )//假设c这个硬币为假硬币而且它比真硬币重
            {
                cout << c << " is the counterfeit coin and it is heavy.\n";
                break;
            }
        }
    }
    return 0; 
}
bool IsFake(char c,bool light)//light 为真表示假设假币为轻,否则表示假设假币为重
{
    for(int i = 0;i < 3; ++i) 
    {
        char * pLeft,*pRight; //指向天平两边的字符串
        if(light)
        {
            pLeft = Left[i];
            pRight = Right[i];
        }
        else //如果假设假币为重,则把称量结果左右对换 ,避免下switch代码再写一遍
        {
            pLeft = Right[i];
            pRight = Left[i];
        }
        
        switch(result[i][0])//假币为轻的情况
        {
            case 'u':
                if ( strchr(pRight,c) == NULL) return false;//若为左边高,且该币在左边,则c为真币
                break;
            case 'e':
                if( strchr(pLeft,c) || strchr(pRight,c)) return false;//若结果为平衡,且左边有硬币c,或者右边有硬币c,则c为真币
                break;
            case 'd':
                if ( strchr(pLeft,c) == NULL) return false;//若为右边高,且该币在右边 则c为真币
                break;
        }
    }
    return true;
}

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++称硬币(枚举) 的相关文章

  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str

随机推荐

  • 区块链100篇之第九篇--默克尔树(Merkle Tree)

    中本聪在他的创世论文中一个概念 就是SPV 中文意思是简单支付验证 从这里我们可以看出SPV指的是 支付验证 而不是 交易验证 那这两者有什么区别吗 简单的说就是支付验证只需验证该笔交易是否被确认过了 而交易验证是需要验证该笔交易是否满足一
  • 权健系统服务器放在那里,《灵魂筹码》服务器版本初次亮相 测试情况符合预期...

    从测试的情况来看 服务器状况良好 带宽使用符合要求 匹配功能使用正常 微博截图 测试游戏截图 1月11日晚7点 期待已久的 灵魂筹码 服务器版本终于开始了第一次发号测试 首度与玩家见面了 这款中式恐怖风格的非对称对抗逃生游戏 在6月末登录s
  • Deeplearning4j 实战(8) : Keras为媒介导入Tensorflow/Theano等其他深度学习库的模型

    Eclipse Deeplearning4j GitChat课程 https gitbook cn gitchat column 5bfb6741ae0e5f436e35cd9fEclipse Deeplearning4j 系列博客 htt
  • 产品管理学习笔记【1】-B端产品总体流程

    Author skatexg Time 2020 11 09 end
  • 收藏!关于数据科学中数学和统计学的完全指南

    全文共6409字 预计学习时长19分钟 图源 Unsplash 数据科学家是程序员中最擅长统计学 统计学家中最擅长编程的人 乔什 威尔斯 Josh Wills 数学很重要 数学与我们周围的一切事物息息相关 从形状 图案 颜色到花朵中花瓣的数
  • hydra使用教程

    目录标题 注意 hydra详细使用教程 hydra简介 hydra常用命令 hydra支持破解的服务 协议 对应功能的参数模板 1 破解ssh 2 破解ftp 3 get方式提交 破解web登录 4 post方式提交 破解web登录 5 破
  • c语言:strcat

    C 库函数 char strcat char dest const char src 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾 dest 指向目标数组 该数组包含了一个 C 字符串 且足够容纳追加后的字符串 src
  • 2023湖南省“楚怡杯”职业技能大赛“网络安全” 项目比赛任务书

    2023湖南省 楚怡杯 职业技能大赛 网络安全 项目比赛任务书 2023湖南省 楚怡杯 职业技能大赛 网络安全 项目比赛任务书 A模块基础设施设置 安全加固 200分 A 1 登录安全加固 Windows Linux A 2 Nginx安全
  • 【从零开始】力扣刷题(1)

    文章目录 前言 数组 数组的遍历 485 最大连续的一个数 495 提莫攻击 414 第三大的数 628 三个数的最大乘积 数组 统计数组中的元素 645 错误的集合 697 数组的度 484 找到所有数组中消失的数组 442 数组中重复的
  • Linux下用C编写WebSocet服务以响应HTML5的WebSocket请求

    在HTML5中新增了WebSocket 使得通讯变得更加方便 这样一来 Web与硬件的交互除了CGI和XHR的方式外 又有了一个新的方式 那么使用WebSocket又如何与下层通信呢 看看WebSocket的相关介绍就会发现 其类似于HTT
  • HTML介绍及代码

    1 HTML介绍 超文本 标记 语言 用来描述网页的一种语言 1 1 HTML CSS JS三者关系 HTML 结构 决定网页的结构和内容 是什么 CSS 表现 样式 设定网页的表现样式 什么样子 JavaScript JS 行为 控制网页
  • 华为手机计算机删除怎么恢复出厂设置,华为手机恢复出厂设置后怎么还原【图文】...

    华为手机我想大家一定听说过 这是国内最有名气的手机品牌了 华为手机经过这几年的不断发展 现在已经完全可以与三星 苹果 等这些国际大牌手机相提并论了 而且华为手机比它们还有很大的价格优势 华为手机固然好 但是用的时间长了也会出现一些状况 比方
  • DEDE调用指定文章ID来调用特定文档

    指定文章的id来调用特定文档在某些情况下还是比较实用的 下面有个示例 需要的朋友可以了解下 代码如下 dede arclist row 1 idlist 6 li a href field description a li dede arc
  • 【C++】STL——vector的使用、 vector增删查改函数的介绍和使用、push_back和pop_back、operator[]

    文章目录 1 vector的使用 2 vector的增删查改 1 push back 尾插 2 pop back 尾删 3 find 查找 4 insert 在position之前插入val 5 erase 删除指定位置的数据 6 swap
  • Python项目代码结构详解

    目录结构组织方式 简要解释一下 bin 存放项目的一些可执行文件 当然你可以起名script 之类的也行 luffy 存放项目的所有源代码 1 源代码中的所有模块 包都应该放在此目录 不要置于顶层目录 2 其子目录tests 存放单元测试代
  • QML 中播放PPT文件

    效果 一 思路 MFC 操作PPT 然年将MFC封装成dll 供Qt使用 案例分享 Qt的PPT播放器 长沙红胖子Qt的博客 CSDN博客 qt 打开ppt Qt将mfc中的句柄 加载到QWidget中 QML 通过 QQuickWidge
  • 用户态和内核态的区别

    1 操作系统需要两种CPU状态 内核态 Kernel Mode 运行操作系统程序 操作硬件 用户态 User Mode 运行用户程序 2 指令划分 特权指令 只能由操作系统使用 用户程序不能使用的指令 举例 启动I O 内存清零 修改程序状
  • 计网

    实验目的和要求 熟悉交换机各种命令模式和基本命令 学习交换机的基本配置 制作网络拓扑图 1台交换机 2台PC 2台PC能够ping通 截图 截图网络拓扑图 2台PC 2台pc机分别用连通线和交叉线连接 然后测试其连通性 学习交换机VLAN的
  • 【crypto】基于crypto.js的web前端加解密系统实现

    文章目录 一 概念介绍 1 1 crypto js介绍 1 2 加密 哈希 编码 1 2 1 加密 解密 1 2 2 散列 哈希 1 2 3 BASE64编解码 二 加解密思想 以md5为例 三 前端加密系统实现代码 3 1 加解密 3 2
  • C++称硬币(枚举)

    有12枚硬币 其中有11枚真币和1枚假币 假币和真币重量不同 但不知道假币比真币轻还是重 现在 用一架天平称了这些币三次 告诉你称的结果 请你找出假币并且确定假币是轻是重 数据保证一定能找出来 输入 第一行是测试数据组数 每组数据有三行 每