给出一个数字,问是否能根据规则匹配字典中一个字符串。。如果我们按照每一位来枚举每一种可能的话,那样可能就会超时。。

因为字典中最多只有5000个字符串,所以我们可以枚举字典中的字符串将其按照规则转换成数字,判断是否跟输入的相等就可以了。

#include <iostream>
#include <algorithm>
#include <map>
#include <string>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
using namespace std;
const int INF = 0x7f7f7f7f;
char str[]={"22233344455566670778889990"};
int main()
{
    FILE *fp;
    char s[15],ans[15];
    int i,flag=0;
    if((fp=fopen("dict.dic","rb"))==NULL)
        exit(0);
    scanf("%s",ans);
    while(fscanf(fp,"%s",s)!=EOF)
    {
        if(strlen(ans)!=strlen(s))
            continue;
        for(i=0;s[i];i++)
            if(ans[i]!=str[s[i]-'A'])
                break;
        if(s[i]==0)
        {
            printf("%s\n",s);
            flag=1;
        }
    }
    if(flag==0) puts("NONE");
    return 0;
}

发表评论

电子邮件地址不会被公开。

Post Navigation