Поделитесь своими знаниями, ответьте на вопрос:
Информатика егэ №13373. проверьте, правильно ли написана программа на python, и является ли она эффективной по времени и по памяти: на спутнике «восход» установлен прибор, предназначенный для измерения солнечной активности. в течение времени эксперимента (это время известно заранее) прибор каждую минуту передаёт в обсерваторию по каналу связи положительное целое число, не превышающее 1000, — количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. после окончания эксперимента передаётся контрольное значение — наибольшее число r, удовлетворяющее следующим условиям: 1) r — произведение двух чисел, переданных в разные минуты; 2) r делится на 26. напишите эффективную по времени и используемой памяти программу, которая будет проверять правильность контрольного значения. программа должна напечатать отчёт по следующей форме. вычисленное контрольное значение: … контроль пройден (или контроль не пройден) если удовлетворяющее условию контрольное значение определить невозможно, то выводится только фраза «контроль не пройден». перед текстом программы кратко опишите используемый вами алгоритм решения. на вход программе в первой строке подаётся количество чисел n ≤ 100 000. в каждой из последующих n строк записано одно положительное целое число, не превышающее 1000. в последней строке записано контрольное значение. программа: n = int( m26, m13, m2, m = 0, 0, 0, 0 for i in range(n): num = int( if num % 26 == 0 and num > m26: m26 = num elif num % 13 == 0 and num > m13: m13 = num elif num % 2 == 0 and num > m2: m2 = num elif num > m: m = num ans = max(m13*m2, m13*m26, m26*m, m26*m2, ) r = int( print('вычисленное контрольное значение: ', ans) print('контроль пройден' if ans == r else 'контроль не пройден')
#include "malloc.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// Вводим исходные данные.
int m;
int n;
printf ("Введите количество столбцов? m = ");
cin >> m;
printf ("Введите количество строк? n = ");
cin >> n;
// Создаем матрицу.
int* pMatrix = (int*) malloc (m * n * sizeof (int));
// Инициализируем другие переменные.
int xMin = 0, // левая граница спирали
xMax = m, // правая граница спирали (не включая ее, поэтому ниже будет использоваться xMax - 1)
yMin = 0, // верхняя граница спирали
yMax = n, // нижняя граница спирали (не включая ее, поэтому ниже будет использоваться yMax - 1)
i = 0, // текущее число
x, y; // расходный материал.
// Бесконечный цикл, пока не заполним матрицу.
while (1)
{
// Заполняем верхний ряд слева направо.
for (x = xMin; x < xMax; x++)
pMatrix[x + yMin * m] = i++;
// Заполнили весь верхний ряд. Подвигаем вниз верхнюю границу.
yMin ++;
// Если верхняя граница совпала с нижней, то заканчиваем цикл.
if (yMin == yMax)
break;
// Заполняем правый ряд сверху вниз.
for (y = yMin; y < yMax; y++)
pMatrix[xMax - 1 + y * m] = i++;
// Заполнили весь правый ряд. Подвигаем налево правую границу.
xMax --;
// Если правая граница совпала с левой, то заканчиваем цикл.
if (xMax == xMin)
break;
// Заполняем нижний ряд справа налево.
for (x = xMax - 1; x >= xMin; x--)
pMatrix[x + (yMax - 1) * m] = i++;
// Заполнили весь нижний ряд. Подвигаем вверх нижнюю границу.
yMax --;
// Если верхняя граница совпала с нижней, то заканчиваем цикл.
if (yMin == yMax)
break;
// Заполняем левый ряд снизу вверх.
for (y = yMax - 1; y >= yMin; y--)
pMatrix[xMin + y * m] = i++;
// Заполнили весь левый ряд. Подвигаем направо левую границу.
xMin ++;
// Если правая граница совпала с левой, то заканчиваем цикл.
if (xMax == xMin)
break;
// если мы все еще здесь, значит идем на очередной виток спирали.. .
}
// Есть предположение, что спираль заполнена. Напечатаем ее, посмотреть.. .
for (y = 0; y < n; y++)
{
// Печатаем строку.
for (x = 0; x < m; x++)
printf ("i, ", pMatrix[x + y * m]);
// Переходим на другую строку.
printf ("\r\n");
}
// Освобождаем память и выходим.
free (pMatrix);
pMatrix = 0;
}