Страницы

Поиск по вопросам

понедельник, 1 октября 2018 г.

Найти произведение двух наибольших скоростей

Я писал ЕГЭ по информатике, сегодня стали известны результаты. Почему-то в C4 мне поставили всего лишь 1 балл из 4, хотя задача наипростейшая. К сожалению, у меня нет точной формулировки задания, поэтому напишу по памяти. Вводится сначала число N (количество частиц), потом N скоростей частиц (по условию от -10000 до 10000). Нужно вывести произведение двух наибольших из скоростей. Причём это нужно сделать эффективно по памяти и вычислениям. Вот мой код (точь-в-точь из моей работы):
#include using namespace std;
int main() { int N; cin >> N; int m[2]={-10000, -10000}; for(int i=0; i> v; m[mi]=(m[mi]Проверил на компьютере у себя, всё нормально работает. Программа эффективна, потому что не заносит все числа в массив, а считает всё по мере ввода чисел. Если не найдёте ошибку в алгоритме, пойду на апелляцию. То ли я неправильно понял условие задачи (тут вы мне конечно не поможете), то ли проверяющим не понравился смайлик (m[1]Обновление
У меня тут другие подозрения появились. Возможно, что мой код вообще не проверяли, потому что организаторша в ППЭ неправильно номер дополнительного бланка написала и жирно исправила цифру 7 на 3. Возможно, что компьютер принял эту цифру за 8 и из-за этого проверили только часть задания на первом бланке, где написан алгоритм программы на русском языке. Это подтверждается тем, что в критериях оценки написано, что один балл ставится, если "по приведённому тексту решения ясно, что экзаменуемый понимает, из каких этапов должно состоять решение задачи". Только факт того, что я скачал в Интернете все свои бланки, этому противоречит.
Обновление 2
Всё, нашёл ошибку (см. мой ответ). Всё прояснилось, на апелляцию не пойду.
northerner
Алгоритм очень плохой. Реально плохой. Как раз на 1 балл. И да, я эксперт ЕГЭ.
А так лучше?
#include using namespace std;
int main() { int N; cin >> N; int m[2]={-10000, -10000}; int n[2]={10000, 10000}; for(int i=0; in[0]); int v; cin >> v; if(m[mi]v) n[ni]=v; } cout << max(m[0]*m[1], n[0]*n[1]); return 0; }


Ответ

Автор неверно написал в теме условие задачи, необходимо найти максимальное из произведений всех пар скоростей, а не произведение двух наибольших скоростей. В критериях выставления одного балла четко написано: Предложен лишь частично верный алгоритм решения: в программе ищутся значения только максимальных элементов. Здесь пошла нездоровая дискуссия о том, что, мол, школьные учителя ничего не понимают в программировании, поэтому работу зарезали. Так вот, я к тому, что в данном случае всё совершенно не так, один балл выставлен справедливо.

Комментариев нет:

Отправить комментарий