Counterfeit Dollar(poj1013暴力枚举)

系统 1614 0

题意:有A-L个标号的硬币,其中有一个是假币,你不知道假币的轻重,现在给你三个字符串,up代表右面轻,down右面重,even代表两面相等,找出假币并且判断轻重

思路:因为只有A-L个硬币所以枚举一下,假设A是假币,然后判断一下是否满足那三个条件,满足条件的保存

怎么是满足条件,除了不满足条件的,剩下的都满足条件。

不满足条件的

1.两面相等的字符串出现假币,说明假设不成立。

2.右面轻的字符串出现假币在左面轻或者在右面重,说明假设也不成立。

3.右面重的字符串出现假币在左面中或者在右面轻,说明假设也不成立。

不满足上面条件就是假币。

 

    #include<iostream>

#include<cstdio>

#include<cstring>

using namespace std;

char L[3][10];

char R[3][10];

char heav[3][10];

struct coin

{

    char c;

    int flag;

};

int main()

{

    int t;

    scanf("%d",&t);

    while(t--)

    {

        int i,j;

        for(i = 0; i < 3; i++)

        {

            scanf("%s%s%s",L[i],R[i],heav[i]);

        }

        coin a;a.c = 'A',a.flag = -1;

        int f;

        for(i = 0; i < 12; i++)

        {

            int flag_L = 0,flag_R = 0;f = -1;

            for(j = 0; j < 3; j++)

            {

                flag_L = 0,flag_R = 0;

                int len;

                int len_L = strlen(L[j]),len_R = strlen(R[j]);

                for(len = 0; len < len_L; len++)

                {

                    if((i+'A') == L[j][len])

                        flag_L = 1;

                }

                for(len = 0; len < len_R; len++)

                {

                    if((i+'A') == R[j][len])

                        flag_R = 1;

                }

                if(strcmp(heav[j],"even") == 0 )

                {

                    if(flag_L || flag_R)

                    {

                        break;

                    }

                }

                else if(strcmp(heav[j],"up") == 0)

                {//printf("%c\n",i+'A');

                    if(flag_R && f == 0)

                        break;

                    if(flag_L && f == 1)

                        break;

                    if(!flag_R && !flag_L)

                        break;

                    if(flag_R)

                     {

                        f = 1;

                    }

                    else if(flag_L)

                    {

                        f = 0;

                    }

                }

                else if(strcmp(heav[j],"down") == 0)

                {

                    if(flag_L && f == 0)

                        break;

                    if(flag_R && f == 1)

                        break;

                    if(!flag_R && !flag_L)

                        break;

                    if(flag_L)

                    {

                        f = 1;

                    }

                    if(flag_R)

                    {

                        f = 0;

                    }

                }

            }

            if(j == 3)

            {

                a.c = i+'A';

                a.flag = f;

            }

        }

        if(a.flag == 0)

            printf("%c is the counterfeit coin and it is heavy.\n",a.c);

        else

            printf("%c is the counterfeit coin and it is light.\n",a.c);

    }

    return 0;

}


  


 

 

Counterfeit Dollar(poj1013暴力枚举)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论