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; j right)) flag=false; if (strcmp(a[k],"down")==0 && !(left