Bailian4111 判断游戏胜者-Who Is the Winner文本处理

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian4111 判断游戏胜者-Who Is the Winner文本处理相关的知识,希望对你有一定的参考价值。

4111:判断游戏胜者-Who Is the Winner

总时间限制: 1000ms 内存限制: 65536kB
描述
Alice和Bob在玩一个游戏,每一局中他们每人获得一个16进制数串,计算它对应的二进制数串中有多少个连续的1序列块(单个的1也算作序列块)。块数多者胜利,请判断游戏的胜者并输出,若平局则输出Tie,比如样例中的第一组数据为Alice: 0xfa425 Bob: 0xab3672。Alice的数据转换为2进制串后为11111010010000100101, 其中有6个连续的1序列块。Bob的数据转换为2进制串后为 101010110011011001110010 其中有8个序列块,故胜者为Bob。

输入
第一行为游戏局数正整数n,接下来n行每行由两部分组成,前者是Alice获得的16进制数串,后者是Bob获得的16进制数串,中间用空格隔开。
输出
每一行输出一局的胜者。
样例输入
2
0xfa425 0xab3672
0x52c6 0xf429
样例输出
Bob
Tie

问题链接Bailian4111 判断游戏胜者-Who Is the Winner
问题简述:(略)
问题分析:题目中没有指出输入的16进制字符串的长度,所以用整数来存储16进制字符串有可能会溢出,只能用字符串来处理。如果用C++语言来实现,则用string类型存储字符串,存储上是安全的。这里用C语言来实现,需要把字符数组声明得大一些。实际上,任何计算其数据规模也是有限度的,不可能是无限度的。
程序说明:程序中用函数strtok()来计算“1序列块”,也可以用原始的字符处理来计算。
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* Bailian4111 判断游戏胜者-Who Is the Winner */

#include <stdio.h>
#include <string.h>
#include <ctype.h>

char digits[16][5] = "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
                      "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111";
char a[1024], b[1024], t[4096];

int cnt(char s[])

    t[0] = '\\0';
    for (int i = 2; s[i]; i++)
        strcat(t, isdigit(s[i]) ? digits[s[i] - '0'] : digits[s[i] - 'a' + 10]);

    int cnt = 0;
    char *p = strtok(t, "0");
    while (p) 
        cnt++;
        p = strtok(NULL, "0");
    

    return cnt;


int main()

    int n;
    scanf("%d", &n);
    while (n--) 
        scanf("%s%s", a, b);

        int acnt = cnt(a), bcnt = cnt(b);

        printf("%s\\n", acnt == bcnt ? "Tie" : (acnt > bcnt ? "Alice" : "Bob"));
    

    return 0;

以上是关于Bailian4111 判断游戏胜者-Who Is the Winner文本处理的主要内容,如果未能解决你的问题,请参考以下文章

二分查找 - bailian 3441:4 Values whose Sum is 0

openjudge1308——Is It A Tree?

对井字游戏获胜者的二维数组进行排序

Bailian4005 拼点游戏贪心

Bailian4005 拼点游戏贪心

算法leetcode|1823. 找出游戏的获胜者(rust太好用了)