| ||||||||||
Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
参考写的代码,感觉比较容易理解#include <stdlib.h> #include <stdio.h> #include <string.h> #include <malloc.h> char dic[10001][16];//字典中的单词 char word[51][16]; //需要检查的单词 int DicNum=0; int WordNum=0; int Delete(char *word,char *dic) { int dif=0; while (*word) { if (*word!=*dic) { word++; dif++; if (dif>1) return 0; } else { word++; dic++; } } return 1; } int Change(char *word,char *dic) { int dif=0; while (*word) { if (*(word++) != *(dic++)) { dif++; if (dif>1) return 0; } } return 1; } int Insert(char *word,char *dic) { int dif=0; while (*dic) { if (*dic!=*word) { dic++; dif++; if (dif>1) return 0; } else { word++; dic++; } } return 1; } int main() { int i,j,k,wflag[10001]; while (scanf("%s",dic[DicNum])&&dic[DicNum][0]!='#') DicNum++; while (scanf("%s",word[WordNum])&&word[WordNum][0]!='#') WordNum++; for (i=0;i<WordNum;i++) { //记录通过变换得到字典单词的下标 int pa=0,flag=0; int len=strlen(word[i]),diclen; for (k=0;k<DicNum;k++)//对于每一个单词遍历字典 { diclen=strlen(dic[k]); if (diclen==len) { if (!strcmp(word[i],dic[k])) { //equal flag=1; break; } else if (Change(word[i],dic[k])) wflag[++pa]=k; } else if (diclen-len==1) { if(Insert(word[i],dic[k])) wflag[++pa]=k; } else if (len-diclen==1) { if (Delete(word[i],dic[k])) wflag[++pa]=k; } } if(flag) printf("%s is correct\n",word[i]); else { printf("%s: ",word[i]); for (j=1;j<=pa;j++) printf("%s ",dic[wflag[j]]); printf("\n"); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator