POJ 1013 Counterfeit Dollar
题意:有一打硬币,其中有一个是假币,质量可能较轻,也可能较重。通过三次称重将假币找出。
由于计算机很难模仿人的想法来实现问题。这道题我纠结了很久。
最后我是通过一一枚举的笨方法做的。就是从A硬币开始到L硬币结束,一一假设其为假币,其中又分为轻和重。当符合三次称重之后便找到了假币。
后来看网上有人是将三次称重这样实现的:给这十二枚硬币赋初值。如果是even,那么硬币值不变。如果是up,那么左边的自加,右边的自减。由于对于不确定的硬币还要做下一次测试。所以通过三次测试之后,偏离初值最大的必然为假币
#include
#include
#include
#include
using namespace std;
int main ()
{
int n,i,j,k;
cin>>n;
while(n--)
{
char al[3][20],ar[3][20],a[3][10];
int v[15]= {0},visit[15]= {0};
bool flag=true;
for (i=0; i<3; i++)
cin>>al[i]>>ar[i]>>a[i];
for (i=0; i<24; i++)
{
flag=true;
v[i/2]=(i%2==0 -1:1);
for (k=0; k<3; k++)
{
int left=0,right=0;
for (j=0; jright)) flag=false;
if (strcmp(a[k],"down")==0 && !(left