浙江工商大学oj iSTEP 1058 寄居蟹与海葵 的 一种c语言解法 您所在的位置:网站首页 寄居蟹象征 浙江工商大学oj iSTEP 1058 寄居蟹与海葵 的 一种c语言解法

浙江工商大学oj iSTEP 1058 寄居蟹与海葵 的 一种c语言解法

2024-06-29 10:05| 来源: 网络整理| 查看: 265

题目链接:iSTEP | 寄居蟹与海葵

此为 浙江工商大学oj编程实训参考题库(题号列表)-CSDN博客 系列的一篇文章。

===================================================================================================

题目 寄居蟹与海葵

描述

寄居蟹与海葵是一对合作互助的共栖伙伴。海葵是寄居蟹最称职的门卫。它用有毒的触角去蜇那些敢来靠近它们的所有动物,保护寄居蟹。而寄居蟹则背着行动困难的海葵,四出觅食,有福同享。 但并不是所有寄居蟹和海葵都可以做搭档的。那就要看海葵的身体是不是符合寄居蟹的螺壳。 海葵的身体是有褶皱的,而寄居蟹的螺壳同样凹凸不平,我们可以用一个大写字母组成的字符串来表示它们的高低程度,其中A代表0,B代表1,依次类推。我们称两者相加等于25的就算是吻合,比如A和Z相吻合,B与Y吻合,依次类推。 只要海葵身体的部分序列与寄居蟹外壳的序列相吻合,就称他们可以一起生活。 比如: 1.海葵的褶皱是"ABCDEFG",寄居蟹是"ZYXWVUT"。这样,它们就可以完全吻合了。 2.海葵的褶皱是"AHBICJDKELFMGN",寄居蟹是"ZYXWVUT"。这样,寄居蟹可以和海葵的部分序列"ABCDEFG"相吻合(注意:部分序列不改变字符原来的先后顺序,比如"ACB"就不是它的部分序列)。 3.海葵的褶皱是"ABCD",寄居蟹是"ZYXWVUT"。这样,虽然海葵可以和寄居蟹前面一段完全吻合,但它比寄居蟹要小,不能完全保护寄居蟹的安全,所有它们是不适合的。 4.海葵的褶皱是"HIJKLMNOPQ",寄居蟹是"ZYXWVUT"。这样,它们就可以完全不吻合了。 现给你两段字符串S1、S2,分别代表海葵和寄居蟹的外壳,为了它们以后各都能快乐地生活,请你帮忙计算一下它们是不是吻合的。

输入

输入包括多组测试数据。 每组测试数据包括两个字符串H、J,分别代表海葵的外壳和寄居蟹的外壳。可以保证它们的长度都小于100000。 输入以0 0结束。

输出

如果寄居蟹和海葵的外壳能吻合,就输出"Yes",否则输出"No"。

输入样例 1 

ABCDEFG ZYXWVUT AHBICJDKELFMGN ZYXWVUT ABCD ZYXWVUT HIJKLMNOPQ ZYXWVUT 0 0

输出样例 1

Yes Yes No No

===================================================================================================

解题挫见:较简单的题目,要看清题意(特别是题目中第二种情况)。个人认为将字母强制转换ascll码是一种较高效的方法。(注意Yes和No的大小写,笔者在这里卡了很久😭)。

注意!strlen()函数每次运行相当于一次for循环,多次调用可能会超时。(在内网oj中严格控制运行时间,所以会超时)应该将strlen()先存储。

知识点:数据处理

以下为通过代码以及一些详细的注释(用c语言书写):

!!!!!!!!!!!!!!!!!!!仅参考思路,严禁直接ctrl+c!!!!!!!!!!!!!!!!

// // Created by Mrlaolu on 2023/10/16. // #include "stdio.h" #include "string.h" char s1[100020],s2[100020],YorN; int main() { while(1) { scanf("%s%s",s1,s2); if(s1[0] == '0' && s2[0] == '0'){break;} //输入以0 0结束。 int len_s1 = (int)strlen(s1); //strlen()函数每次运行相当于一次for循环,多次调用可能会超时,所以先储存 int len_s2 = (int)strlen(s2); if(len_s1 < len_s2) //海葵比寄居蟹小就直接打印NO { printf("No\n"); continue; } int j = 0; for (int i = 0;i < len_s1 && j < len_s2; ++i) //s2一个个对过来,对上就YorN = 1(相当于过) { YorN = 0; if ((int)s1[i] + (int)s2[j] == 155) { YorN = 1; j++; continue; } } if(YorN && j == len_s2){printf("Yes\n");} //YES条件为全过 else{printf("No\n");} } return 0; }

如有哪有不足或更好的解决方法,请慷慨提出,感激不尽!!!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有