字符串是什么,字符串序列
如果一个符号的代码不是另一个符号的代码的前缀,则一组符号的编码被称为是可立即解码的。对于这个问题,我们将假设所有的代码都是二进制的,一组代码中没有两个代码是相同的,每个代码至少有一位,不超过十位,每个集合至少有两个代码,不超过八个。
例子:假设一个字母表有符号{甲,乙,丙,丁}
下面的代码可以立即解码:
甲:01乙:10丙:0010丁:0000
但是这个不是:
甲:01乙:10丙:010丁:0000(注意A是C的前缀)
投入
编写一个程序,接受来自数据文件的一系列记录组作为输入。一个组中的每条记录都包含一组0和1,代表不同符号的二进制代码。每个组后面都有一个包含单个9的分隔符记录;分隔符记录不属于该组。每个组都独立于其他组;一个组中的代码与任何其他组中的代码都不相关(也就是说,每个组都要独立处理)。
输出
对于每个组,您的程序应该确定该组中的代码是否可以立即解码,并且应该打印一个输出行,给出组号并说明该组是否可以立即解码。
样本输入描述了上面的例子。
样本值输入
01
抽样输出
集合一可立即解码
集合2不是立即可解码的
托了好久才又继续刷题,电脑终于买过来了。
废话不说,看题。
字符串系列还没刷完,我真是退步了,最近没刷都有点生疏了。
这题就是判断所给10串里面有没有某个串是另一串的前缀。
本来思路是截取字符串再对比,不过老是实现不了,字符串这部分有空得复习复习了。
后来看网上人家用了一个非常方便的办法,就是字符串查找函数,判断一个字符串是否包含在另一个字符串里面,返回第一个字符的地址,然后与其第一个字符地址对比。
代码大大缩短了。
代码(未交流):
#包括输入输出流
#包括字符串
使用命名空间标准
int main()
int CNT=1;
while (1)
char ch[100][100],tmp
int n=0;
for(int I=0;CIN ch[I];我)
if (strcmp(ch[i], 9 ==0)
打破;
n;
bool jd=true
for(int I=0;我我)
for(int j=I 1;j j)
if (strstr(ch[i],ch[j])==ch[i][0] strstr(ch[j],ch[i])==ch[j][0])
jd=false
打破;
如果(法学博士)
“cout”集" cnt "是可立即解码的“恩德尔
其他
“cout”设置“CNT”不是可立即解码的“恩德尔
返回0;
}
超过时间限制。
测试是没有错误的,但是我检查后发现一个问题就是这程序没有退出点。
修改后英亩了。
#包括输入输出流
#包括字符串
使用命名空间标准
int main()
int CNT=1;
炭化温度[100];
而(cin温度)
if (temp[0]==9 )
打破;
char ch[100][100],tmp
int n=1;
strcpy(ch[0],temp);
for(int I=1;CIN ch[I];我)
if (strcmp(ch[i], 9 ==0)
打破;
n;
bool jd=true
for(int I=0;我我)
for(int j=I 1;j j)
if (strstr(ch[i],ch[j])==ch[i][0] strstr(ch[j],ch[i])==ch[j][0])
jd=false
打破;
如果(法学博士)
“cout”集" cnt "是可立即解码的“恩德尔
其他
“cout”设置“CNT”不是可立即解码的“恩德尔
memset(temp,0,sizeof(temp));
返回0;
}
各种不容易啊,有空要多刷了,不能停了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。