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

POJ1013称硬币问题

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

POJ1013称硬币问题

//有一打(12枚)硬币,其中有且仅有1枚假币,11枚真币
//
//用A~L作为各个硬币的代号
//
//假币可能比真币略轻,也可能略重
//
//现在利用天枰,根据Input输入的3次称量,找出假币,并输出假币是轻还是重。
//Up:右盘上升,说明右盘可能有轻假币,也可能左盘有重假币。

//Down:右盘下降,说明右盘可能有重假币,也可能左盘有轻假币。

//Even:右盘与左盘平衡,由于假币有且仅有1枚,则说明此时天枰两边的硬币全为真币。

//输入样例 :
//1
//ABCD EFGH even
//ABCI EFJK up
//ABIJ EFGH even
//输出样例:
//K is the counterfeit coin and it is light. (K是伪造的硬币,它很轻。)

#include 
#include  
using namespace std;
char Left[3][7];//天平左侧硬币 
char Right[3][7];//天平右侧硬币 
char result[3][7];//结果 
bool IsFake(char c,bool light);//c 表示硬币真假 light 表示硬币轻重 (0 真 1 假  0 重 1 轻)
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++)//遍历12个硬币 
 		{
 			if(IsFake(c,true))//1为轻 
 			{
 				cout << " is the counterfeit coin and it is light." << endl; 
 				break;
 			}
 			else if(IsFake(c,false))
 			{
 				cout << "K is the counterfeit coin and it is heary." << endl;
 				break;
 			} 
 		}
 	}
 	return 0;
} 
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': 
				{
					//strchar()返回在字符串 pRight 中第一次出现字符 c 的位置,如果未找到该字符则返回 NULL
					if(strchr(pRight,c) == NULL)
					{
						return false;
						//天平右边翘起  
					}
					break;
				}
			case 'e': 
				{
					if(strchr(pLeft,c) || strchr(pRight,c))
					{
						return false;
					}
					break;
				}
			case 'd':
				{
					if(strchr(pLeft,c) == NULL)
					{
						return false;
						//天平左边翘起 
					}
					break;
				} 
		}
	}
	return true;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630143.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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