Сообщение Re[2]: Задание из ЕГЭ по информатике от 15.08.2017 14:16
Изменено 15.08.2017 14:17 alexzzzz
Re[2]: Задание из ЕГЭ по информатике
Здравствуйте, watchmaker, Вы писали:
W>
Переписал на C# как смог:
На исходной последовательности 10, 100, 45, 55, 245, 35, 25, 10, 10, 10, 26 всё отлично, результат = 2600.
На обратной последовательности 26, 10, 10, 10, 25, 35, 245, 55, 45, 100, 10 код падает (InvalidOperationException: Enumeration already finished)
На последовательности 2, 5, 2, 2, 2, 2, 2, 2, 2, 1 выдаёт 0, правильный ответ 5.
У кого косяк?
--
Мой вариант на C#
На тех же последовательностях даёт 2600, 2600 и 5.
W>
int solve() {
W> const int d = 8;
W> int b[d] = {0};
W> int n = get_next_int();
W> int r = 0;
W> int m = 0;
W> for (int i = 0; i < n; ++i) {
W> int& e = b[i % d];
W> m = max(m, e);
W> e = get_next_int();
W> r = max(r, m * e);
W> }
W> return r;
W>}
Переписал на C# как смог:
Скрытый текст | |
| |
На обратной последовательности 26, 10, 10, 10, 25, 35, 245, 55, 45, 100, 10 код падает (InvalidOperationException: Enumeration already finished)
На последовательности 2, 5, 2, 2, 2, 2, 2, 2, 2, 1 выдаёт 0, правильный ответ 5.
У кого косяк?
--
Мой вариант на C#
const int MIN_DISTANCE = 8;
int Solve(IEnumerable<int> numbers)
{
int firstNumber = -1;
int maxProduct = -1;
var queue = new Queue<int>(MIN_DISTANCE + 1);
foreach (int secondNumber in numbers)
{
queue.Enqueue(secondNumber);
if (queue.Count <= MIN_DISTANCE)
{
continue;
}
firstNumber = Math.Max(firstNumber, queue.Dequeue());
maxProduct = Math.Max(maxProduct, firstNumber * secondNumber);
}
return maxProduct;
}
На тех же последовательностях даёт 2600, 2600 и 5.
Re[2]: Задание из ЕГЭ по информатике
Здравствуйте, watchmaker, Вы писали:
W>
Переписал на C# как смог:
На исходной последовательности 10, 100, 45, 55, 245, 35, 25, 10, 10, 10, 26 всё отлично, результат = 2600.
На обратной последовательности 26, 10, 10, 10, 25, 35, 245, 55, 45, 100, 10 код падает (InvalidOperationException: Enumeration already finished)
На последовательности 2, 5, 2, 2, 2, 2, 2, 2, 2, 1 выдаёт 0, правильный ответ 5.
У кого косяк?
--
Мой вариант на C#
На тех же последовательностях даёт 2600, 2600 и 5.
W>
int solve() {
W> const int d = 8;
W> int b[d] = {0};
W> int n = get_next_int();
W> int r = 0;
W> int m = 0;
W> for (int i = 0; i < n; ++i) {
W> int& e = b[i % d];
W> m = max(m, e);
W> e = get_next_int();
W> r = max(r, m * e);
W> }
W> return r;
W>}
Переписал на C# как смог:
Скрытый текст | |
| |
На обратной последовательности 26, 10, 10, 10, 25, 35, 245, 55, 45, 100, 10 код падает (InvalidOperationException: Enumeration already finished)
На последовательности 2, 5, 2, 2, 2, 2, 2, 2, 2, 1 выдаёт 0, правильный ответ 5.
У кого косяк?
--
Мой вариант на C#
const int MIN_DISTANCE = 8;
int Solve(IEnumerable<int> numbers)
{
int firstNumber = -1;
int maxProduct = -1;
var queue = new Queue<int>(MIN_DISTANCE + 1);
foreach (int secondNumber in numbers)
{
queue.Enqueue(secondNumber);
if (queue.Count <= MIN_DISTANCE)
{
continue;
}
firstNumber = Math.Max(firstNumber, queue.Dequeue());
maxProduct = Math.Max(maxProduct, firstNumber * secondNumber);
}
return maxProduct;
}
На тех же последовательностях даёт 2600, 2600 и 5.