栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

枚举——称硬币

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

枚举——称硬币

问题描述:
有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.
————————————————
版权声明:本文为CSDN博主「-出发-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/happyjacob/article/details/86776634(原题目)

		//称量硬币
#include 
#include
using namespace std;
char Left[3][7];
char Right[3][7];
char result[3][4];//存储左右天平以及测量结果
bool isfake(char c, bool r);
//r为true,硬币是轻的,false,为重的
int main()
{
	for (int i = 0; i < 3; i++)
	{
		cin >> Left[i] >> Right[i] >> result[i];//最开始设置的是left[3][7],right[3][7],输入的时候,visual stdio就显示“不明确”
	}
for(char c='a';c<='l';c++)
{	
	if (isfake(c, true))//假设的两种可能
		cout << "假的硬币:" << c << "轻的";
	else if(isfake(c,false))
		cout << "假的硬币:" << c << "重的";
}
return 0;
}
bool isfake(char c, bool r)
{
	char* pl, * pr;
	for (int i = 0; i < 3; i++)
	{
		if (r)//清的
		{
			pl = Left[i];
			pr = Right[i];
		}
		else
		{
			pl = Right[i];
			pr = Left[i];
		}
		switch (result[i][0])
		{
		case 'u'://左边重
			if (strchr(pr, c) == NULL)
				return false;
			break;
		case 'd':
			if (strchr(pl, c) == NULL)
				return false;
			break;
		case 'e':
			if (strchr(pr, c) == NULL || strchr(pl, c) == NULL)
				return false;
			break;
		}
	}
	return 0;
}

附:
strchr(const char *s,char v);
查找字符串s中首次出现字符v的位置,返回s中v及其之后的字符

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号