POJ 水题若干

2014-11-23 17:34:22 · 作者: · 浏览: 12

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