算法二

来源:互联网 发布:三菱plc解密软件 编辑:程序博客网 时间:2024/06/16 22:18

垃圾邮件检查

小明被垃圾邮件所困扰,遂决定构造自己的垃圾邮件过滤器:

  • 通过遍历邮件的每一行文字,来判断该行为good还是bad
  • bad行越多,该邮件越有可能是垃圾邮件
  • good行使用“o”来标记,bad行使用“x”来标记
  • 所有的标记放到judgeLog字符串中
    • 例如judgeLog=”oxooo”代表邮件有5行,其中第二行是bad
  • 小明给出了伪代码实现
// 设置该邮件的score为0// 对该邮件的每一行进行遍历//      如果该行为good,将score加上G//      如果改行为bad,将score减去B//      如果score为负//          返回该邮件为垃圾邮件("SPAM")// 如果score永远不是负数//      返回该邮件为正常邮件("NOT SPAM")

伪代码中G、B为正整数,分别代表good,bad的权重值(由用户自定义)


输入

  • 行标记字符串(string):judgeLog
  • good行权重(int):good
  • bad行权重(int):bad

输出

  • 是否为垃圾邮件(string):SPAM / NOT SPAM

思路

遍历judgeLog,求取score的值,当score为负数时及时返回

代码实现

#include <iostream>#include <string>using namespace std;class SpamChecker{public:    static string spamcheck(string judgeLog, int good, int bad)    {        int sum=0;        for(int i=0; i<judgeLog.length(); i++)        {            if('o' == judgeLog[i])                sum += good;            else            {                sum -= bad;                if(sum<0)                    return "NOT SPAM";            }        }        return "SPAM";    };};int main(){    string judgeLog;    int good, bad;    cout << "set judgeLog:"<<endl;    cin >> judgeLog;    cout << "set good:" << endl;    cin >> good;    cout << "set bad:" << endl;    cin >> bad;    string resultSpam = SpamChecker::spamcheck(judgeLog,good,bad);    cout << resultSpam;    return 0;}
原创粉丝点击