Лев Сивко:
Здравствуйте.
В задаче "11. Сделай N" столкнулись с проблемой что программа для входных данных 15 находит решение "+*+", а в условии сказано что "**++", но оба решения подходят так как (1+3)*3+3 = 15 и 1*3*3+3+3 = 15
И подобное проявляется на поздних тестах.
Что можно сделать в этом случае?
Ваша программа выдаёт неверный ответ "No" на 3-м тесте 102, а не на 1-ом тесте 15
Протокол по тестам
Тест Результат Время Код выхода Комментарий
1 0 0,1 0 верный ответ Run test
2 0 0,1 0 верный ответ Run test
3 0 0,1 0 Illegal Op : N Run test
Там есть чекер, который проверяет последовательность, исполняя операции.
{(C) Sudilovsky Kostya 2002}
{corrected Dolinsky M, 17.08.2022}
{$A+,B-,D+,E-,F-,G+,I+,L+,N+,O-,P-,Q+,R+,S+,T-,V+,X+}
var
RightAns, UserAns,RightIn, Res :text;
Procedure OK;
begin
assign(Res,'$result$.txt'); rewrite(Res);
writeln(Res,paramstr(4));
close(Res); close(UserAns); close(RightAns);
halt(0);
end;
Procedure BAD(Message:string);
begin
assign(Res,'$result$.txt'); rewrite(Res);
writeln(Res,0);
writeln(Res,Message);
close(Res); close(UserAns); close(RightAns);
halt(0);
end;
Procedure Init;
begin
Assign(RightIn,paramstr(1));reset(RightIn);
Assign(RightAns,paramstr(2));reset(RightAns);
Assign(UserAns,paramstr(3)); reset(UserAns);
end;
{ user variables }
var
s : string;
N,d,i,Ans : longint;
Begin
Init;
readln(RightIn,N);
read(UserAns, s);
d:=length(s);
Ans:=1;
for i:=1 to d do
begin
if s[i]='*' then Ans:=Ans*3 else
if s[i]='+' then Ans:=Ans+3 else BAD('Illegal Op : '+s[i]);
end;
if Ans=N
then OK
else BAD('Wrong Answer')
End.