POJ 1013 (简单模拟)

来源:互联网 发布:杭州网络诈骗最新新闻 编辑:程序博客网 时间:2024/05/21 18:45

题意:有一个天平,和12枚硬币(有一枚是假的),用A~L表示,但是不一定每个字母都会出现。现在有三次称量结果,求一枚假硬币,每个样例都有解。

这个问题可以利用标记的次数来判断,标记的次数越多则可以认为是假的。

abs()函数求绝对值,头文件是#include<stdlib.h>

#include<stdio.h>#include<stdlib.h>#include<memory.h>#include<string.h>int main(){    int n;    scanf("%d",&n);    int flag[12];                              //对每次天平状态进行记录    char p1[15],p2[15],updown[10];    while(n--)    {        int f;                  //注意作用域        memset(flag,0,sizeof(flag));        for(int t = 0;t < 3; t++)        {            scanf("%s%s%s",p1,p2,updown);            int lenth = strlen(p1);         //题意中p1 p2的长度相同            if(strcmp(updown,"even") == 0)            {                for(int i = 0;i < lenth; i++) //标记为真                {                    flag[p1[i] - 'A'] = 12;                    flag[p2[i] - 'A'] = 12;                }            }            if(strcmp(updown,"up") == 0)            {                for(int i = 0;i < lenth; i++)                {                    if(flag[p1[i] - 'A'] != 12) //如果是真,则不改变                        flag[p1[i] - 'A']++;                    if(flag[p2[i] - 'A'] != 12)                        flag[p2[i] - 'A']--;                }            }            if(strcmp(updown,"down") == 0)            {                for(int i = 0;i < lenth; i++)                {                    if(flag[p1[i] - 'A'] != 12)                        flag[p1[i] - 'A']--;                    if(flag[p2[i] - 'A'] != 12)                        flag[p2[i] - 'A']++;                }            }            int maxn = 0;            f = 0;              //用作标记假的位置            for(int i = 0;i < 12; i++)            {                if(flag[i] == 12)                    continue;                if(maxn < abs(flag[i]))                    {                        maxn = abs(flag[i]);                        f = i;                    }            }        }        if(flag[f] > 0)         //重的一方在加,所以大于零            printf("%c is the counterfeit coin and it is heavy.\n",f+'A');        if(flag[f] < 0)            printf("%c is the counterfeit coin and it is light.\n",f+'A');    }    return 0;}


0 0
原创粉丝点击