算法提高 P1003

来源:互联网 发布:网络改变人性 编辑:程序博客网 时间:2024/05/11 02:11

1008: 算法提高 P1003

时间限制: 1 Sec  内存限制: 128 MB
提交: 6  解决: 2
[提交][状态][讨论版]

题目描述

作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过,有些狡猾的犯罪嫌疑人会 改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行是关键词列表,第二行是待检查的句子。程序 的输出为在该句子中所找到的经过顺序调整的关键词。(单词全部为小写,单词之间以一个空格分隔,每一行的单词个数不限)

输入

guns mines missiles
aameric ssell snug dan iimsssle ot sit neeemi

输出

guns missiles

样例输入

guns mines missilesaameric ssell snug dan iimsssle ot sit neeemi 

样例输出

guns missiles
题目链接
点击打开链接
简单粗暴的方法,就是代码复杂。
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;int main(){    int key[1000][26];  ///用来存放每个关键词的某个单词的个数    int sen[26];  ///存放检索的句子中某个单词的个数    char str1[1000];   ///存放第一个字符串    char str2[1000];   ///存放第二个字符串    char temp[1000][100];  ///存放关键词    int a[1000];    int i,j,k;    while(gets(str1))    {        gets(str2);        memset(a,0,sizeof(a));        memset(key,0,sizeof(key));        j=0;        for(i = 0; i < strlen(str1); i++)  ///关键词        {            k = 0;            while(str1[i]!=' '&&str1[i]!='\0')            {                temp[j][k]=str1[i];                key[j][str1[i]-'a']++;                i++;                k++;            }            temp[j][k]='\0';            j++;        }        for(i = 0; i < strlen(str2); i++)        {            memset(sen,0,sizeof(sen));            while(str2[i]!=' '&&str2[i]!='\0')            {                sen[str2[i]-'a']++;                i++;            }            for(k = 0; k < j; k++)            {                if(a[k]==0)                {                    int flag = 1;                    for(int t1=0;t1<26;t1++)                    {                        if(key[k][t1]!=sen[t1])                        {                            flag = 0;                            break;                        }                    }                    if(flag)                        a[k]=1;                }            }        }        for(i = 0;i < j; i++)        {            if(a[i])            {                printf("%s",temp[i]);                break;            }        }        i++;        for(;i < j; i++)        {            if(a[i])            {                printf(" %s",temp[i]);            }        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击