poj 1035

题意:给定一个字典 然后在给定一系列字符串  问在字典中是否能找到此字符串  或者是否存在 删除 增加 改变 一个字符 使之成为相同的字符串

思路:暴力 模拟

改了几遍

  1 #include<iostream>
  2 #include<cstring>
  3 #include<stdio.h>
  4 using namespace std;
  5 char map[11111][22];
  6 int main()
  7 {
  8     
  9     int f=0;
 10     int sum;
 11     int l,lm;
 12     char sm[22];
 13     int i,j,k,q;
 14     int n=0;
 15     //    string s;
 16     while(scanf("%s",map[n++])!=EOF)
 17     {
 18         l=strlen(map[n-1]);
 19         if(l==1&&map[n-1][0]=='#')
 20             break;
 21     };
 22     n--;
 23     while(scanf("%s",sm)!=EOF)
 24     {
 25         f=0;
 26         l=strlen(sm);
 27         if(l==1&&sm[0]=='#')
 28             break;
 29         for(i=0;i<n;i++)
 30         {
 31             if(strcmp(sm,map[i])==0)
 32             {
 33                 printf("%s is correct\n",sm);
 34                 break;
 35             }
 36         }
 37         if(i<n) continue;
 38         
 39         for(i=0;i<n;i++)
 40         {
 41             lm=strlen(map[i]);
 42             sum=0;
 43             if(l==lm)//  寻找相差一个字符的
 44             {
 45                 for(j=0;j<l;j++)
 46                     if(sm[j]!=map[i][j])
 47                         sum++;
 48             }
 49             if(sum==1)
 50             {
 51                 if(f==0)
 52                 {
 53                     f=1;
 54                     printf("%s:",sm);
 55                 }
 56                 printf(" %s",map[i]);
 57             }
 58             sum=0;
 59             int q;
 60             if(lm+1==l)//字典中的字符串比匹配的字符串小一个
 61             {
 62                 for(k=0;k<l;k++)
 63                 {
 64                     for(j=0,q=0;j<l;j++)
 65                     {
 66                         if(j==k) continue;
 67                         if(sm[j]!=map[i][q])
 68                             break;
 69                         q++;
 70                     }
 71                     if(j>=l)
 72                     {
 73                         if(f==0)
 74                         {
 75                             f=1;
 76                             printf("%s:",sm);
 77                         }
 78                         printf(" %s",map[i]);
 79                         break;        
 80                     }
 81                 }
 82             }
 83             if(lm-1==l)//字典中的字符串比此个字符串大一个
 84             {
 85                 
 86                 for(k=0;k<lm;k++)
 87                 {
 88                     for(j=0,q=0;j<lm;j++)
 89                     {
 90                         if(j==k) continue;
 91                         if(map[i][j]!=sm[q])
 92                             break;
 93                         q++;
 94                     }
 95                     if(j>=lm)
 96                     {
 97                         if(f==0)
 98                         {
 99                             f=1;
100                             printf("%s:",sm);
101                         }
102                         printf(" %s",map[i]);
103                         break;        
104                     }
105                 }
106             }
107         }
108         if(f==0)
109         {
110             printf("%s:\n",sm);
111             continue;
112         }
113         printf("\n");
114     }
115     return 0;
116 }

 

posted @ 2014-06-13 18:55  _一千零一夜  阅读(113)  评论(0编辑  收藏  举报