#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> char left[3][7], right[3][7], result[3][7]; bool IsFake(char c, bool light); int main() { int t; scanf("%d", &t); while (t--) { for (int i = 0; i < 3; i++) { scanf("%c %c %c", &left[i], &right[i], &result[i]); } for (char c = 'A'; c <= 'L'; c++) { if (IsFake(c, true)) { printf("%cis the counterfeit coin and it is light.\n", c); break; } if (IsFake(c, false)) { printf("%c is the counterfeit coin and it is heavy.\n", c); break; } } } } bool IsFake(char c, bool light) { for (int i = 0; i < 3; i++) { char* pleft, * pright; if (light) { pleft = left[i]; pright = right[i]; } else { pleft = right[i]; pright = left[i]; } switch (result[i][0]) { case'u':if (strchr(pleft, c) == NULL)return false; case'e':if (strchr(pleft, c) || strchr(pright, c))return false; case'd':if (strchr(pright, c) == NULL)return false; default: break; } } return true; }
时间: 2024-04-01 20:37:29 浏览: 61
C++ 中pragma once 与 #ifndef _XXX_H_ #define _XXX_H_的区别
5星 · 资源好评率100%
这段代码是一道谜题(称为“假币问题”),要求判断在一堆硬币中有哪一个是假的,并且是轻一些或重一些。代码使用了一个 IsFake 函数来判断硬币是否是假的。
具体来说,代码首先读入 t 表示测试数据组数。每组测试数据包含三行,每行描述一个天平的测量结果。每行包含三个字符串,分别表示天平左边的硬币、右边的硬币和天平的测量结果。测量结果包含三种可能:"up" 表示左边的硬币比右边的硬币重,"down" 表示左边的硬币比右边的硬币轻,"even" 表示左右两边的硬币重量相等。
然后,代码使用 IsFake 函数来遍历每一个可能的假硬币,判断它是否符合所有测量结果,如果是,则输出该硬币的字母和它是轻还是重。IsFake 函数接受两个参数:一个表示要判断的硬币的字母,另一个表示假设该硬币是轻还是重。它会遍历所有的测量结果,判断该硬币是否符合每个测量结果。如果符合所有测量结果,则说明该硬币是假的,否则说明该硬币是真的。
阅读全文