120 - 算法 - 枚举算法 2692 假币问题

#include <iostream>
#include <cstdio>
using namespace std;
/*
	问题:枚举问题 解决办法
	openjudge:2692假币问题
	解决思路:考虑每一个位置 为轻light 为heavy 为even
	计算符合这个假设情况既可以输出。
	时间:2021年3月30日0时38分
*/

//数据结构定义
int status[12];
char left1[3][7];
char right1[3][7];
char result[3][7];

//判断 是否满足假设的情况
bool balanced()
{
	int i, k, leftW, rightW;
	for ( i = 0; i < 3; i++)
	{
		leftW = rightW = 0;
		for (k = 0; k < 6 && left1[i][k]!=0;k++)
		{
			leftW += status[left1[i][k]-'A'];
			rightW += status[right1[i][k]-'A'];
		}
		if (leftW > rightW && result[i][0] != 'u')
		{
			return false;
		}
		if (leftW == rightW && result[i][0] != 'e')
		{
			return false;
		}
		if (leftW < rightW && result[i][0] != 'd')
		{
			return false;
		}
	}
	return true;
}

//假设每个位置是 重 轻 为ture 的话 就知道是谁了
//第i重 为1  第i个轻为 -1
int main()
{
	int i, num;
	scanf("%d",&num);
	while (num-- > 0)
	{
		for (i = 0; i < 3;i++)
		{
			scanf("%s %s %s",left1[i],right1[i],result[i]);
		}
		for (i = 0; i < 12; i++)
			status[i] = 0;
		for (i = 0; i < 12; i++)
		{
			//第i个重
			status[i] = 1;
			if (balanced())
				break;
			//第i个轻
			status[i] = -1;
			if (balanced())
				break;
			status[i] = 0;
		}
		printf("%c is the counterfeit coin and it is %s.\n", i + 'A', status[i] > 0 ? "heavy":"light");
	}

	//system("pause");
	return 0;
}
上一篇:Linux 自动删除N小时或分钟前的文件


下一篇:从 0 学习 Python 0 - 120 大合集总结