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

Bailian4111 判断游戏胜者-Who Is the Winner【文本处理】,第1张

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 
#include 
#include 

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] = ';'for
    ( int= i 2 ;[ s]i;++ i)strcat
        (,tisdigit ([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
{
    ; nscanf
    ("%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 ;}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/717275.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-25
下一篇2022-04-25

发表评论

登录后才能评论

评论列表(0条)

    保存