Bailian4111 判断游戏胜者-Who Is the Winner文本处理
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian4111 判断游戏胜者-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文本处理的主要内容,如果未能解决你的问题,请参考以下文章