本文主要是介绍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;
}
这篇关于120 - 算法 - 枚举算法 2692 假币问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!