Автор | Сообщение |
|
Отправлено: 20.04.19 20:58. Заголовок: Сколько бы мне поставили баллов за подобное решение?
Добрый вечер. Недавно прорешал 27-ю задачу из досрочного варианта и не совсем могу понять, является ли оно эффективным. Я был бы очень благодарен, если бы вы взглянули на мое решение и оценили его. Задача(ссылка на РешуЕГЭ): Моё решение (ссылка на postimage): Комментарии к решению: 1) Проверил различные входные данные в компиляторе с оффициальным решением, и все выводы совпали, то есть программа точно работает правильно. 2) Объяснение переменных: x - вводимые значения; k - количество пар; k31 - значения кратные 31 и не кратные 62; k62 - значения кратные 62; ch - четные значения; num - четные + нечетные значения не кратные 31. Вопросы: Меня смущает тот факт, что все процессы происходят внутри 1 цикла "for" и можно было решить, используя меньше переменных. То есть решение выглядит неряшливым и очевидно может быть лучше. Поэтому меня интересует: Могут ли быть отняты какие-либо баллы за подобное решение? Всем заранее спасибо за помощь!
|
|
|
Ответов - 5
[только новые]
|
|
|
Отправлено: 21.04.19 08:03. Заголовок: Оценка решения
Программа написана на 4 балла. Вы считаете число пар "по ходу дела", в эталонном решении число пар считается в конце. Тем не менее, несомненно, ваш вариант аналогично линеен по времени и постоянен по памяти. По поводу эстетичности, код можно чуть подсократить, если использовать else if if x mod 62 =0 ... else if x mod 31 = 0 ... else if x mod 2 = 0 ... else ...
|
|
|
|
Отправлено: 21.04.19 08:16. Заголовок: Большое спасибо за п..
Большое спасибо за помощь!
|
|
|
|
Отправлено: 05.05.19 14:33. Заголовок: Считается ли такая программа эффективной по времени? (номер 102)
var a:array [1..8] of integer; n,x,k,i,j:integer; begin read (n); for i:=1 to 8 do read (a); for i:=9 to n do begin for j:=2 to 8 do if (a[1]+a[j])mod 8 <>0 then k:=k+1; read (x); for j:=1 to 7 do a[j]:=a[j+1]; a[8]:=x; end; for i:=1 to 7 do for j:=i+1 to 8 do if (a+a[j]) mod 8 <> 0 then k:=k+1; writeln(k:4); end.
|
|
|
|
Отправлено: 05.05.19 16:02. Заголовок: 0 баллов. Ваша прогр..
3 балла. Есть две синтаксические ошибки. По времени эффективна - цикл линейный. for i:=1 to 8 do readln(a[ i ]); if (a[ i ]+a[j]) mod 8 <> 0 then k:=k+1;
|
|
|
|
Отправлено: 07.05.19 22:04. Заголовок: Спасибо! Это учтено,..
Спасибо! Это учтено, возможно при копировании что-то пошло не так)
|
|
|
|