| Автор |
Сообщение |
15.02.2012 20:40:22
Тема: Некорректный тест
|
Владислав Мосько
Темы: 20
Сообщений: 68
Мой профиль
|
По моему мнению, тест номер 6 в задаче по адресу Тренировочные олимпиады\11-20\2\2 - "Санта Клаус " составлен не совсем корректно. Мой стандартный код для нахождения максимального из N чисел
не прошел 6 тест. Взяв "уступку" я увидел, что
ввод:
0
0
вывод:
0
Если мы вводим N как 0, ввод не должен выполнится ни раза. Пришлось добавить к коду добавить специальную обработку этого случая.
Допустимы ли такие тесты?
|
15.02.2012 22:40:56
Тема: Re:Некорректный тест
|
Федор Коробейников
Темы: 46
Сообщений: 162
Мой профиль
|
Так если у тебя N=0, то for i:=1 to n do readln(a[i]);
не выполнится ни разу. И не важно, что там в тестах дальше, хоть 100 нулей. Ответ от этого не зависит. Твоя программа их читать не будет. Здесь если N=0, то ответ 0, а иначе твой стандартный алгоритм.
______________________
Work hard and win a prize
|
18.02.2012 20:16:43
Тема: Re:Некорректный тест
|
Владислав Мосько
Темы: 20
Сообщений: 68
Мой профиль
|
Обработку ввода 0 пришлось добавить потому, что стандартный код не проходил этот тест. Кусочек был таков:
if n = 0 then
begin
readln;
writeln('0');
halt(0);
end;
В том то и ошибка, что программа не читает тот ноль, который второй в тесте. Цикл не выполняется не разу. Поэтому и пришлось вставить пустой readln в обработку.
|
19.02.2012 19:32:51
Тема: Re:Некорректный тест
|
Федор Коробейников
Темы: 46
Сообщений: 162
Мой профиль
|
Владик, все проходит. А если бы уступки не было, как бы ты узнал, что там лишний 0? Если данных в тесте не хватает это беда, а если лишние, то считываться будут только нужные. Жалко, что в базовом программировании нельзя твой код посмотреть.Ты наверное как-то неправильно максимум ищешь.
readln(n);
for i:=1 to n do
readln(a[i]);
max:=0; можно 0 т.к. a[i] от 0.
for i:=1 to n do
if a[i]>max then max:=a[i];
writeln(max);
______________________
Work hard and win a prize
|
19.02.2012 19:53:21
Тема: Re:Некорректный тест
|
Владислав Мосько
Темы: 20
Сообщений: 68
Мой профиль
|
Федя, вот мой стандартный код:
program max;
var
n : longint;
a : longint; { можно и без массива }
max : longint;
i : longint;
begin
readln(n);
max:=-(MAXINT+1); { или 0 }
for i := 1 to n do
begin
readln(a);
if a > max then max := a;
end;
writeln(max);
end.
Он не проходит 6 тест. Программа то не читает 0, который предусмотрен в тесте! То есть тест хочет, чтобы я прочитал ноль после чтения N, а моя программа делать этого не будет, так как for i := 1 to 0 не выполнится ни разу. Вот код, который прошел все тесты:
program max;
var
n : longint;
a : longint;
max : longint;
i : longint;
begin
readln(n);
if n = 0 then
begin
readln;
writeln('0');
halt(0); { завершение программы }
end;
max:=-(MAXINT+1);
for i := 1 to n do
begin
readln(a);
if a > max then max := a;
end;
writeln(max);
end.
Понимаешь, о чем я?
|
19.02.2012 20:23:14
Тема: Re:Некорректный тест
|
Федор Коробейников
Темы: 46
Сообщений: 162
Мой профиль
|
Если так напишешь все пройдет. Просто если n=0, то max у тебя останется -maxint+1 и выведется это число. А так как там a>=0, то max можно присвоить 0 - самое маленькое число. Если n=0, то максимум останется 0, что и есть правильный ответ.
Такой код у тебя пройдет 100%. А считывать ненужные данные никогда не надо.
program max;
var
n : longint;
a : longint; { можно и без массива }
max : longint;
i : longint;
begin
readln(n);
max:=0;
for i := 1 to n do
begin
readln(a);
if a > max then max := a;
end;
writeln(max);
end.
Может тебе так понятней будет.
program max;
var
n : longint;
a : longint; { можно и без массива }
max : longint;
i : longint;
begin
readln(n);
max:=-maxlongint;
if n=0 then max:=0
else
begin
for i := 1 to n do
begin
readln(a);
if a > max then max := a;
end;
end;
writeln(max);
end.
______________________
Work hard and win a prize
|
19.02.2012 20:33:38
Тема: Re:Некорректный тест
|
Владислав Мосько
Темы: 20
Сообщений: 68
Мой профиль
|
К сожалению, такой код не пройдет. Тест предусматривает чтение после ввода N как 0. А твой (и мой) код его не читают. В обработке не так важно присваивание max:=0 как readln.
|
19.02.2012 20:38:57
Тема: Re:Некорректный тест
|
Федор Коробейников
Темы: 46
Сообщений: 162
Мой профиль
|
19.2 20:37 2. Санта Клаус 10 / 10 Все тесты успешно пройдены DelTA3 at DLServer Turbo Pascal 7.0
Какой ты упрямый. Тест ничего предусматривать не может, предусматривает только твоя программа взависимости от условия задачи. Если n=0 надо вывести 0 и ничего не делать, иначе найти максимум из введенных чисел и вывести его. Да скажите ему это еще кто нибудь, а то он мне не верит.
Перебери и проверь! Ошибочно в том тесте лишний 0 написали, но он ни на что не влияет.
______________________
Work hard and win a prize
|
19.02.2012 21:04:05
Тема: Re:Некорректный тест
|
Владислав Мосько
Темы: 20
Сообщений: 68
Мой профиль
|
И я том же! Лишний 0, который читать надо.
|
19.02.2012 21:25:46
Тема: Re:Некорректный тест
|
Федор Коробейников
Темы: 46
Сообщений: 162
Мой профиль
|
проверка на dl - сравнение userans(твоего) и rightans(нужный) это в сложных чекерах нужен входной тест ,а так , как там 1 правильный ответ , то сравнивается твой и правилиный ответ! И ввод не сравнивает!
И не спорь
______________________
Work hard and win a prize
|
19.02.2012 21:41:50
Тема: Re:Некорректный тест
|
Владислав Мосько
Темы: 20
Сообщений: 68
Мой профиль
|
Ладно, хватит засорять форум. В школе поговорим
|
20.02.2012 21:46:04
Тема: Re:Некорректный тест
|
Владислав Мосько
Темы: 20
Сообщений: 68
Мой профиль
|
Федя, я жутко извиняюсь. Когда не прошел 6 тест, я просто забыл присвоить max'у 0. Он так и остался -(MAXINT+1).
|
20.02.2012 22:03:52
Тема: Re:Некорректный тест
|
Федор Коробейников
Темы: 46
Сообщений: 162
Мой профиль
|
А я тебе о чём толкую. Упрямство не двигатель прогресса.
______________________
Work hard and win a prize
|
|
|