24

На вход программы подается целое число. Программа должна вывести вывести минимальную четную цифру числа, или «NO» при ее отсутствии.

Программист написал программу неверно.

Си++
#include <iostream>
using namespace std;

int main()
{
  long N, digit, minDigit;
  cin >> N;
  minDigit = N % 10;
  while (N > 0)
  {
    digit = N % 10;
    if (digit % 2 == 0)
      if (digit < minDigit)
        minDigit = digit;
    N = N / 10;
  }
  if (minDigit == 0)
    cout << "NO" << endl;
  else
    cout << minDigit << endl;
  return 0;
}

1) Укажите, что выведет программа при вводе числа 231.

2) Найдите число, при вводе которого программа, не смотря на ошибки, выведет правильный ответ

3) Исправьте ошибки в программе. Для каждой ошибки выпишите строку, в которой допущена ошибка, и исправление.

Обратите внимание, что вам нужно исправить ошибки в приведенной программе, а не написать свою, возможно, использующую другой алгоритм решения. Гарантируется, что программу можно исправить изменением в двух строках.

25

Дан фрагмент программы:

Си++
#include <iostream>
using namespace std;
const int N = 30;
int main() {
  long a[N];
  long i, j, k;
  for (i = 0; i < N; i++)
    cin >> a[i];
  ...
  return 0;
}

Программа принимает на вход массив из 30 целых чисел. Необходимо найти минимальный элемент массива, делящийся без остатка на 4, и заменить все элементы, делящиеся на 4, на найденный минимум. В конце необходимо вывести измененный массив.

Запишите недостающий фрагмент. Запрещено использовать переменные, не объявленные выше, однако разрешается не использовать какие-то из объявленных переменных.

26

Петя и Вася играют в следующую игру. На столе лежит кучка камней. За один ход разрешается добавить в кучку 1 или 3 камня, либо увеличить количество камней в кучке в 3 раза. Выигрывает тот, после хода которого в кучке находится 36 или более камней.

Изначально в кучке 1 ≤ S ≤ 35 камней.

1a) При каких S Петя может выиграть за один ход?
1б) Назовите S, при котором Вася может выиграть первым ходом независимо от хода Пети.

2) Найдите два значения S, при которых Петя не может выиграть первым ходом, но может выиграть вторым ходом при любой игре Васи.

3) Найдите значение S, при котором:
- существует стратегия, позволяющая Васе выиграть за два хода при любой игре Пети
- не существует стратегии, позволяющей Васе гарантированно выиграть первым ходом
Постройте дерево партий для данной выигрышной стратегии. Обратите внимание, что в дереве не должны присутствовать ходы, которые игрок, играющий по стратегии, не может сделать в соответствии со стратегией — в частности, полное дерево партий не является верным ответом на эту задачу.

27

На вход программе подается целое число N, после чего в N следующих строках вводится N целых положительных чисел. Среди всех пар, удовлетворяющих условиям i < j и ai > aj, необходимо найти пару чисел с наибольшей суммой, делящейся на M = 107. Программа должна вывести искомую пару. Если таких пар несколько, разрешается вывести любую из них.

Программа считается эффективной по времени, если при одновременном увеличении N и M в k раз время выполнения программы увеличивается не более чем в k раз.

Программа считается эффективной по используемой памяти, если объем памяти, используемый программой для хранения данных, не превышает 4 килобайта и не зависит от значения N.

Максимальный балл за правильное решение, эффективное по времени и памяти — 4 балла. Максимальный балл за правильное решение, эффективное по времени, но неэффективное по памяти — 3 балла.

Вы можете сдать одну или две программы (например, одна из них может быть менее эффективной). Программы оцениваются независимо, оценкой за задачу считается максимальная оценка за обе программы. Перед текстом программы обязательно опишите алгоритм решения. Указывайте используемую версию языка программирования.