poj1013 Counterfeit Dollar

原创 2016年06月02日 09:25:32

http://poj.org/problem?id=1013

12个硬币里有1个假币,枚举每一个硬币,如果它是轻或是重,则为假币。

那么如何判断它是轻或是重呢?

判断是轻:

    假设它就是轻。然后由天平三次称量结果倒推:如果称量结果为up,则它一定在右边。如果称量结果为even,则它既不在左边,也不在右边。如果称量结果为down,则它一定在左边。上述都满足,则毫无疑问它就是轻。否则有一个不成立,它就不为轻。

同理,可得判断是否为重。

#include <stdio.h>
#include <string.h>
char left[3][7],right[3][7],result[3][5];
int inLeft(int i,char x)
{
    int j;
    for(j=0;j<strlen(left[i]);j++)
        if(left[i][j]==x)
            return 1;
    return 0;
}
int inRight(int i,char x)
{
    int j;
    for(j=0;j<strlen(right[i]);j++)
        if(right[i][j]==x)
            return 1;
    return 0;
}
int isLight(char x)//判断硬币x是否为轻
{
    int i;
    for(i=0;i<3;i++)
    {
        switch(result[i][0])
        {
            case 'u':if(!inRight(i,x)) return 0; 
                      break;
            case 'e':if(inLeft(i,x)||inRight(i,x)) return 0;
                      break;
            case 'd':if(!inLeft(i,x)) return 0;
                      break;
        }
    }
    return 1;
}
int isHeavy(char x)//判断硬币x是否为重
{
    int i;
    for(i=0;i<3;i++)
    {
        switch(result[i][0])
        {
            case 'u':if(!inLeft(i,x)) return 0; 
                      break;
            case 'e':if(inLeft(i,x)||inRight(i,x)) return 0;
                      break;
            case 'd':if(!inRight(i,x)) return 0;
                      break;
        }
    }
    return 1;
}
int main()
{
    char ch;
    int n;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s %s %s",left[0],right[0],result[0]);
        scanf("%s %s %s",left[1],right[1],result[1]);
        scanf("%s %s %s",left[2],right[2],result[2]);
        for(ch='A';ch<='L';ch++)//枚举12个硬币
        {
            if(isLight(ch))
            {
                printf("%c is the counterfeit coin and it is light.\n",ch);
                break;
            }
            else if(isHeavy(ch))
            {
                printf("%c is the counterfeit coin and it is heavy.\n",ch);
                break;
            }
        }
    }
    return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

POJ1013-Counterfeit Dollar

0716 POJ#1013 Counterfeit Dollar

摘要:枚举所有情况,找出符合条件的硬币。

POJ1013 Counterfeit Dollar

Counterfeit DollarTime Limit: 1000MS Memory Limit: 10000K Total Submissions: 46010 Acce...

poj 1013 Counterfeit Dollar 已知12个球中有1个重量与众不同,用3次找出此球,并判断重量轻重

Counterfeit DollarTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 27975 Accepted: 8755Desc...

POJ 1013:Counterfeit Dollar

Counterfeit Dollar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4202...

POJ 1013--Counterfeit Dollar

poj 1013

POJ 1013 Counterfeit Dollar 找假硬币 模拟

题意:多组测试数据,每组三行。 有一打(12枚)硬币,其中有且仅有1枚假币,11枚真币 用A~L作为各个硬币的代号 假币可能比真币略轻,也可能略重 现在利用天枰,根据Input输入的3次称量,...

POJ1013——Counterfeit Dollar

Counterfeit Dollar Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4614...

HDU 1482/ZOJ 1184/FOJ 1003/POJ 1013 Counterfeit Dollar

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1482 http://acm.zju.edu.cn/onlinejudge/showProbl...

POJ 1013 Counterfeit Dollar

D - Counterfeit Dollar  POJ - 1013  共三种状态: Up:右盘上升,说明右盘可能有轻假币,也可能左盘有重假币。 Dow...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)