首页 > 代码库 > poj 1035

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 }