此乃程序提交失败,至今没有搞懂哪里不对。留做纪念,以后再回头来看。
#include<stdio.h> #include<string.h> #define max( a ,b ) ((a)>(b)?(a):(b)) #define MAX_LEN 16 #define MAX_NUM 10000 char words[ MAX_NUM ][ MAX_LEN ]; int ndata[ MAX_NUM + 1][ MAX_NUM ]; int maxlen( char *a, char *b) { int len = 0; while( *a == *b && *a != '\0') { a++; b++; len++; } if( *a != '\0' && *b != '\0') return len + max( maxlen( a + 1, b), maxlen( a, b + 1) ); return len; } int main() { char word[MAX_LEN]; int nCase = -1; int i = 0; int len1, len2; int maxl, minl; int isFalse = 0; while( scanf("%s",words[++nCase])) { if( strcmp( words[nCase] , "#") == 0 ) break; } while( scanf("%s", word) ) { if( strcmp( word, "#") == 0 ) break; isFalse = 1; for( i = 0; i < nCase; i++) if( strcmp( words[i], word) == 0 ) { printf("%s is correct\n", word); isFalse = 0; break; } if( isFalse ) { printf( "%s:", word); for( i = 0; i < nCase && isFalse; i++ ) { len1 = strlen(word); len2 = strlen( words[i]); if( abs( len1 - len2 ) > 1 ) continue; maxl = max( len1, len2 ); if(( maxl - maxlen( words[i], word)) > 1 ) continue; if( maxl == 1 || word[0] == words[i][0] || word[len1 - 1] == words[i][len2 - 1]) printf(" %s", words[i]); } printf("\n"); } } return 0; }