人的DNA和病毒DNA均表示成由一些字母组成的字符串序列。然后检测某种病毒DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了该病毒,否则没有感染。例如,假设病毒的DNA序列为baa,患者1的DNA序列为aaabbba,则感染,患者2的DNA序列为babbba,则未感染。(注意,人的DNA序列是线性的,而病毒的DNA序列是环状的)

输入格式:

输入第一行中给出1个整数i(1≤i≤11),表示待检测的病毒DNA和患者DNA的对数。
输入i行串序列,每行由两个字符串组成(字符串中不含不可见字符),两字符串之间用一个空格分隔,分别代表病毒的DNA序列和患者的DNA序列,病毒的DNA序列和患者的DNA序列长度不超过500。

输出格式:

依次逐行输出每对检测样本的结果,感染输出:YES,未感染输出:NO。

输入样例1:

1
baa bbaabbba

输出样例1:

YES

输入样例2:

2
cced cdccdcce
bcd aabccdxdxbxa

输出样例2:

YES
NO
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define bool char
#define true 1
#define false 0#define MAXLEN 255//定义串的结构
typedef struct
{char ch[MAXLEN+1];int length;
} SString;//串初始化
void InitSString(SString* S)
{S->length = 0;
}//串赋值
bool StrAssign(SString* S, char str[])
{if(!S){return false;}int i;//挨个赋值,串从下表1开始,字符串从0开始,到字符串的结束标志就结束循环for(i = 1; str[i-1] != '\0'; i++){//超过最大长度就弹出,没超过就赋值if(i <= MAXLEN)S->ch[i] = str[i-1];elsebreak;}//最后修改下串的长度,减一是因为从1开始循环的S->length = i-1;return true;
}//串遍历,测试用
bool PrintString(SString S)
{if(S.length == 0){return false;}for(int i = 1; i <= S.length; i++){printf("%c", S.ch[i]);}printf("\n");return true;
}//BF算法,在主串S中找字串T
int Index_BF(SString S, SString T)
{//先定义初始位置int i = 1, j = 1;//当i和j超出主串或子串的长度就循环结束while(i <= S.length-T.length && j <= T.length){//当两个元素相等时,就都往后移一位if(S.ch[i] == T.ch[j]){i++;j++;}//当不相等时,主串指针向后移一位,字串回到开始位置else{i = i-j+2;j = 1;}}//超出了子串长度就说明含有该子串if(j > T.length){return 1;}else{return 0;}
}//str是病毒串, i是移动的次数,len是病毒串长度
void Virus(char str[], int len)
{char m;//用m记录第一个字符m = str[0];//然后依次向前移动一位for(int j = 1; j < len; j++){str[j-1] = str[j];}//最后把第一位放到最后str[len-1] = m;//puts(str);// printf("\n");return;
}int main()
{//病毒的相关定义char virus[255];int n, len, s = 0;scanf("%d", &n);//getchar();//串的相关定义SString DNA, Viru;InitSString(&DNA);InitSString(&Viru);char dna[255];while(n--){//输入字串和主串scanf("%s",virus);scanf("%s",dna);//把字符串赋值给串StrAssign(&DNA, dna);//先得病毒的长度len = strlen(virus);//用函数输出所有变种for(int i = 0; i < len; i++){//改变病毒的排列Virus(virus, len);//将改变后的字符串输入到串中StrAssign(&Viru, virus);//判断DNA中是否含有病毒序列s = Index_BF(DNA, Viru);//含有就弹出if(s == 1)break;//printf("%s ", str);}if(s == 1){printf("YES\n");}elseprintf("NO\n");}return 0;
}

7-2 病毒感染检测 C语言数据结构 串的练习相关推荐

  1. (C语言)数据结构算法-病毒感染检测(BF算法KMP算法)

    病毒感染检测: 医学研究者最近发现了某些新病毒,得知它们的DNA序列都是环状的.为了快速检测出患者是否感染了相应的病毒,研究者将患者的DNA和病毒的DNA均表示成一些字母组成的字符串序列,然后检测某种 ...

  2. 数据结构——基于字符串模式匹配算法的病毒感染检测

    实验四 基于字符串模式匹配算法的病毒感染检测 [实验目的] 1.掌握字符串的顺序存储表示方法. 2.掌握字符串模式匹配BF算法和KMP算法的实现. [实验内容] 问题描述 医学研究者最近发现了某些新病 ...

  3. 以串结构存储c语言版,数据结构C语言版 串的块链存储表示和实现

    <数据结构C语言版 串的块链存储表示和实现>由会员分享,可在线阅读,更多相关<数据结构C语言版 串的块链存储表示和实现(13页珍藏版)>请在人人文库网上搜索. 1.*数据结构C ...

  4. 从病毒感染检测谈串的模式匹配

    病毒感染检测:串的模式匹配 BF.KMP算法 在网络入侵检测.计算机病毒特征码匹配以及DNA序列匹配等应用中都需要进行串的模式匹配.针对这个问题,书上讲了两种模式匹配的算法,即BF算法和KMP算法,下 ...

  5. 数据据结构实验4《基于字符串模式匹配算法的病毒感染检测》

    (visual studio 2019可运行) 输入及输出要求见<数据结构C语言(第二版)>严蔚敏版 [本文仅用于啥都看不懂还想交作业选手] //KMP求解基于字符串模式匹配算法的病毒感染 ...

  6. 用数据结构c语言写成绩排序,C语言数据结构 快速排序实例详解

    C语言数据结构 快速排序实例详解 一.快速排序简介 快速排序采用分治的思想,第一趟先将一串数字分为两部分,第一部分的数值都比第二部分要小,然后按照这种方法,依次对两边的数据进行排序. 二.代码实现 # ...

  7. matlab高级数据结构,Matlab讲义-第四章Matlab语言数据结构1-10.pdf

    Matlab讲义-第四章Matlab语言数据结构1-10.pdf 第四章第四章 Matlab语言基础语言基础 Matlab语言程序简洁.可语言程序简洁.可 读性很强而且调试十分容易.读性很强而且调试十 ...

  8. 平衡查找树C语言程序,C语言数据结构之平衡二叉树(AVL树)实现方法示例

    本文实例讲述了C语言数据结构之平衡二叉树(AVL树)实现方法.分享给大家供大家参考,具体如下: AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树. 要维持这个树,必须在插入和删除的时候都检 ...

  9. PTA 病毒感染检测 (15分)

    病毒感染检测 (15分) 作者:王东 单位:贵州师范大学 代码长度限制:16 KB 时间限制:400 ms 内存限制:64 MB 人的DNA和病毒DNA均表示成由一些字母组成的字符串序列.然后检测某种 ...

  10. 7-8 病毒感染检测 (10分)

    7-8 病毒感染检测 (10分) 人的DNA和病毒DNA均表示成由一些字母组成的字符串序列.然后检测某种病毒DNA序列是否在患者的DNA序列中出现过,如果出现过,则此人感染了该病毒,否则没有感染.例如 ...

最新文章

  1. Russ Miles:被忽略的架构师和混沌工程
  2. [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。
  3. [Python]程序结构与控制流
  4. xilinx7中管脚mrcc和srcc_Xilinx 7系列FPGA架构之SelectIO结构(一)
  5. 改造一下jeecg中的部门树
  6. java程序设计实验报告册_20145215《Java程序设计》实验一实验报告
  7. 华为P50 Pro最新渲染图曝光 预装鸿蒙HarmonyOS 2
  8. 高端中餐美食餐饮海报PSD模板,看着就有食欲
  9. 美观的导航菜单 -- JQuery实现,支持横向, 竖向
  10. cv2不能读取中文路径
  11. c语言指针详解参数,C语言之指针详解
  12. 软考各高级、中级、初级官方高清晰PDF教材(更新3版教材与新增教材)
  13. Python办公自动化实战 01 | Python优势与自动化思维让你的工作化繁为简
  14. TDP158RSBR 6-Gbps 转接驱动器,兼容HDMI2.0
  15. 小程序之校园交流平台
  16. Navigate组件的使用(React Router6)
  17. svn 文件夹没有绿勾红感叹号图标
  18. 定制Android关机界面
  19. 【MathType】彻底解决公式大小与文章文字大小不统一(含字体的字号与磅(pt)和像素(px)之间的换算关系)
  20. Windows安装You-get详细教程和问题解决分享

热门文章

  1. 虚拟化VMware简介5——DRS 与 DPM 详解
  2. kafka的auto.offset.reset设置earliest和latest区别
  3. 通用虚拟平台virt
  4. sklearn:make_blobs聚类数据生成器
  5. 按键精灵手机版_关于截屏一些方法
  6. In-band network telemetry
  7. 【笔记】基于TF-IDF 算法的文本相似度以衡量技术革新
  8. 企业微信应用获取code
  9. 终极解锁邮件签名证书(S/MIME证书)
  10. 次数分布和平均数、变异数间断性变数资料的整理