数据结构第二版之(课后题)BF算法病毒感染检测
//vs2013下编译通过.换别的编译器自行补充头文件和修改源代码
#include<iostream>
#include<fstream>
#include <string>
using namespace std;
char temp[256];//存放的临时数组
char virus[20];//病毒数组
char DNA[20];//DNA的数组
int j = 0;//病毒长度
int DNAlength = 0;//dna长度
int flag = 0;//判断是不是感染开关
void toCharArry(string str)//将读入的字符串转化为字符数组
{ j = 0;
int tem=0;
strcpy_s(temp, str.c_str());
//cout << str.length();
for (int i = 0; i < str.length(); i++)//找到空格的位置
{
if (temp[i] == ' '){ j=(i+1); break; }
}
tem = j;
for (int i = 0; i < str.length() - j + 1;i++)//写入DNA数组;
{
DNA[i] = temp[tem];
if (i == str.length() - j){
DNA[i] = '\0';//到底用不用加\我也不知道
}
tem++;
}
for (int i = 0; i < j; i++)//得到病毒序列
{
virus[i] = temp[i];
} /*for (int i = 0; i <9; i++)//输出Dna序列
{
cout <<DNA[i];
}
cout << endl; for (int i = 0; i < j; i++)//输出病毒序列
{
cout << virus[i];
}
cout << endl;
cout << j;*/
}
void addvVirusToDouble(char virus[])//将病毒序列扩大为原来二倍
{
int k = j-1;
for (int i = 0; i < j-1 ; i++)
{
virus[k] = virus[i];
k++;
}
/*for (int i = 0; i < j*2; i++)//输出病毒序列
{
cout << virus[i];
}
cout << endl;*/
}
int BF(int zhu, int fu, char virus[], char DNA[])//BF算法判断
{
int i = 0, j = 0; while (i <= zhu&&j <= fu)
{
if (DNA[i]==virus[j]){ i++; j++; }
else { i = i - j + 1; j = 0; } }
if (j > fu){ return 1; }
else return 0; }
void virusPossibility()//列出将长度扩大二倍的病毒序列可能性
{
char temp[30];
for (int i = 0; i < j; i++)
{
for (int k = 0; k < j; k++)temp[k] = virus[i + k];
//temp[j] = '\0';
if (BF(DNAlength - j - 1, j - 2, temp, DNA) == 1)flag = 1; }
/*if (flag == 1) { flag = 0; cout << "O" << endl; }
else cout << "X" << endl;
*/ }
void detection()//调用函数判断是否感染
{
int num = 0;
string str;
ifstream infile("病毒检测输入数据.txt", ios::in);
ofstream outfile("病毒检测结果.txt", ios::out);
if (!infile){ cout << "open document ERROE!!" << endl; exit(-1); }
else cout << "The document reads into success!!" << endl;
if (!outfile){ cout << "Establish document failure ERROE!!" << endl; exit(-1); }
getline(infile, str);
num = stof(str);//赋值给num之后判断;
//cout << num;
while (num--)
{
getline(infile, str);
DNAlength = str.length();
toCharArry(str);
addvVirusToDouble(virus);
virusPossibility();
if (flag == 1){ flag = 0; outfile << str + " " + "YES" << endl; }//妈的这里必须把flag弄成0,要不只要有一个是下面的都是了...
else { outfile << str + " " + "NO" << endl; }
} infile.close();
outfile.close(); } int main()
{
string str;
detection();
cout << "The TXTdocument outputs success!!!" << endl; }
程序截图:
老师让思考的作业,网上找了找也没有找到,作为小白,自己动手写了一下分享给大家,造福后来人,代码写的不够好......不要乱喷谢谢!!
数据结构第二版之(课后题)BF算法病毒感染检测的更多相关文章
- C++面向程序设计(第二版)课后习题答案解析
最近没什么心情整理零散的知识点,就整理一下第四章的课后习题答案. 1.定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算.将运算符函数重载为非成员函数,非友元的普通函数.编程序, ...
- 数据结构Java版之递归与迭代算法(五)
递归的概念很简单,就是自己调用自己. 而迭代,则是通过修改初始化数据,得到中间结果,然后不断的对中间结果进行修改,而得到最终结果.简单来说迭代就是循环. 在此,我们用一个比较经典的Fibonacci数 ...
- 《python核心编程第二版》课后习题6-12答案
下午脑子瓦特,想了半天也没有想出算法,刚刚抽风终于实现了,特此记录. ̄□ ̄|| 题目 (a)创建一个名字为 findchr()的函数,findchr()要在字符串 string 中查找字符 char, ...
- 武汉科技大学ACM :1004: 华科版C语言程序设计教程(第二版)课后习题3.7
Problem Description 输入无符号短整数k[hex.]和p[oct.],将k的高字节作为结果的低字节,p的高字节作为结果的高字节组成一个新的整数. Input k[hex.]和p[oc ...
- 武汉科技大学ACM :1001: 华科版C语言程序设计教程(第二版)课后习题3.12
Problem Description 输入n,输出对应的边长为n的空心正六边形. 为方便看图,样例中点 '.' 表示空格,打印图形时请打印空格而非小圆点. Input 边长n.(n<=20) ...
- 数据结构(c++)(第二版) Dijkstra最短路径算法 教学示范代码出现重大问题!
前言 去年在数据结构(c++)的Dijkstra教学算法案例中,发现了一个 bug 导致算法不能正常的运行,出错代码只是4行的for循环迭代代码. 看到那里就觉得有问题,但书中只给了关键代码的部分,其 ...
- 算法(JAVA)----两道小小课后题
LZ最近翻了翻JAVA版的数据结构与算法,无聊之下将书中的课后题一一给做了一遍,在此给出书中课后题的答案(非标准答案,是LZ的答案,猿友们可以贡献出自己更快的算法). 1.编写一个程序解决选择问题.令 ...
- 数据结构之BF算法,kmp算法,三元组,十字链表总结
在这一章中,老师教了我们四种数据结构:BF算法,kmp算法,三元组和十字链表:还给我们讲了2019年团体天体赛中T1-8的AI题 1.对于BF和kmp算法,老师除了在课堂上讲解算法的主要核心思想外,还 ...
- C程序设计(谭浩强)第五版课后题答案 第一章
大家好,这篇文章分享了C程序设计(谭浩强)第五版课后题答案,所有程序已经测试能够正常运行,如果小伙伴发现有错误的的地方,欢迎留言告诉我,我会及时改正!感谢大家的观看!!! 1.什么是程序?什么是程序设 ...
随机推荐
- python批量提取哔哩哔哩bilibili视频
# -*- coding: utf-8 -*- """ Created on Tue Jan 29 13:26:41 2019 @author: kwy "&q ...
- Rcnn/Faster Rcnn/Faster Rcnn的理解
基于候选区域的目标检测器 1. 滑动窗口检测器 根据滑动窗口从图像中剪切图像块-->将剪切的图像块warp成固定大小-->cnn网络提取特征-->SVM和regressor进行分类 ...
- 如何使用gcc_clang进行C语言的编译_编译的流程是什么?
编译命令 gcc/clang -g -O2 -o -c test test.c -I... -L... -l -g : 输出文件中的调试信息 -O : 对输出文件做出指令优化,默认是O1, O2优化更 ...
- Numpy 为运算
Numpy “bitwise_” 开头的函数是位运算函数: Numpy 位运算包括以下几个函数: 函数 描述 bitwise_and 对数组元素执行位与操作 bitwise_or 对数组元素执行 ...
- 解决 /actuator/beans不能访问
在Spring Boot中配置了actuator,能够访问到/actuator/health,但是在访问/actuator/beans的时候却显示如下404错误. 原因是 /actuator/heal ...
- three.js的一些介绍
什么是 WebGL? WebGL(Web 图形库)是一种 JavaScript API,用于在任何兼容的 Web 浏览器中呈现交互式 3D 和 2D 图形,而无需使用插件.WebGL 通过引入一个与 ...
- TP-Link TL-WR841N v14 CVE-2019-17147 缓冲区溢出漏洞分析笔记v2018.12.31
0x00 背景 Httpd服务中的缓冲区溢出漏洞 复现参考文章https://www.4hou.com/posts/gQG9 Binwalk -Me 解压缩 File ./bin/busybox文件类 ...
- day16-Python运维开发基础(os / os.path / shutil模块)
1. OS模块与shutil模块 os :新建/删除shutil: 复制/移动 # ### os模块 与 shutil模块 """ os 新建/删除 shutil 复制/ ...
- 「LuoguP3979」遥远的国度
传送门 Luogu 解题思路 带换根操作的树剖. 换根只会影响更新或查询子树信息的操作. 我们始终保持初始的根不变,然后只要分类讨论一下: 假设当前被查询的节点是 \(u\) 如果 \(u\) 就是根 ...
- css 文本溢出省略号
单行溢出显示省略号: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 多行溢出显示省略号: text-overflow: ...