此乃程序提交失败,至今没有搞懂哪里不对。留做纪念,以后再回头来看。
#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;
}