Отримання знань
дистанційна підтримка освіти школярів
Входные данные
Выходные данные
Пример входных данных
Пример выходных данных
Анализ условия и обсуждение идеи решения
Пример решения на Pascal:
program PKU1035;
const maxn = 10000;
type integer = longint;
Tstring = string[15];
var a: array[1..maxn] of Tstring;
n: integer;
var st: Tstring;
procedure prepare;
begin
n := 0; readln(st);
repeat
n := n + 1;
a[n] := st;
readln(st);
until st = '#';
end;
function appear(var st: Tstring): boolean;
var i: integer;
begin
appear := true;
for i := 1 to n do if a[i] = st then exit;
appear := false;
end;
function replace(l: integer; var s, t: Tstring): boolean;
var i, sum: integer;
begin
sum := 0;
for i := 1 to l do if s[i] <> t[i] then sum := sum + 1;
replace := (sum = 1);
end;
function more(l: integer; var s, t: Tstring): boolean;
var i: integer;
begin
i := 0;
while (i < l) and (s[1 + i] = t[1 + i]) do i := i + 1;
while (i < l) and (s[1 + i] = t[2 + i]) do i := i + 1;
more := i = l;
end;
procedure find(var st: Tstring);
var len, i, l: integer;
begin
len := length(st);
for i := 1 to n do begin
l := length(a[i]);
if (len = l) and replace(l, st, a[i]) then write(' ', a[i]) else
if (len = l - 1) and more(len, st, a[i]) then write(' ', a[i]) else
if (len = l + 1) and more(l, a[i], st) then write(' ', a[i]);
end;
end;
procedure main;
begin
readln(st);
repeat
if appear(st) then writeln(st, ' is correct')
else begin
write(st, ':');
find(st); writeln;
end;
readln(st);
until st = '#';
end;
begin
prepare;
main;
end.
Пример решения на С++:
#include < stdio.h >
#include < stdlib.h >
#include < string.h >
#include < math.h >
#define N 10010
char dict[N][20];
int result[N];
int len;
int check( char a[20], char b[20] )
{
int l1= strlen(a), l2= strlen(b);
int num= 0;
if( l1== l2 )
{
for( int i= 0; i< l1; ++i )
if( a[i]!= b[i] && ++num>= 2 ) return -1;
if( num== 0 ) return 2;
}
else if( l1< l2 )
{
for( int i= 0, j= 0; i< l1 && j< l2; ++i, ++j )
if( a[i]!= b[j] )
{
if( ++num>= 2 ) return -1;
i--;
}
}
else
{
for( int i= 0, j= 0; i< l1 && j< l2; ++i, ++j )
if( a[i]!= b[j] )
{
if( ++num>= 2 ) return -1;
j--;
}
}
return 1;
}
int main()
{
char str[20];
while( scanf("%s", str), strcmp( str, "#" )!= 0 ) strcpy( dict[len++], str );
while( scanf("%s", str), strcmp( str, "#" )!= 0 )
{
int size= strlen( str );
int tt= 0;
bool equal= false;
for( int i= 0; i< len; ++i )
{
int ll= strlen( dict[i] );
if( abs( ll- size )< 2 )
{
int value= check( dict[i], str );
if( value== 1 ) result[tt++]= i;
else if( value== 2 )
{
printf("%s is correct\n", str);
equal= true;
break;
}
}
}
if( !equal )
{
printf("%s:", str );
for( int i= 0; i< tt; ++i )
printf(" %s", dict[ result[i] ]);
printf("\n");
}
}
return 0;
}
Попередня | Зміст | Наступна |