/******************************************************************************
Последовательность натуральных чисел характеризуется числом Х — наибольшим
числом, кратным 14 и являющимся произведением двух элементов последовательности
с различными номерами. Гарантируется, что хотя бы одно такое произведение
в последовательности есть. https://otvet.mail.ru/question/225299873
*******************************************************************************/
#include <iostream>
#include <fstream>
//#include <utility>
//#include <vector>
//#include <algorithm>
using namespace std;
int main(){
int m14 = 0; //максимальное найденное число из последовательности ввода, делится без остатка на 14
int m7 = 0; //максимальное найденное число из последовательности ввода, делится без остатка на 7
int m2 = 0; //максимальное найденное число из последовательности ввода, делится без остатка на 2
int m = 0; //максимальное найденное число из последовательности ввода
int result = 0;
int n; //эту переменную вы зачем вообще объявили, если не используете ее нигде считав, я вот использую
int x; // зачем вы объявляете эту переменную внутри цикли, на каждой итерации ж блин
ifstream input("27.txt"); //открываем файл последовательности ввода
input >> m; //n; - в m нужно считывать, т.к. m - первое встреченое число в последовательности ввода, и оно автоматом становится максимальным из считаных, т.к. других нет
while(!input.eof()){//если не достигнут конец файла
input >> x; //считываем новое число последовательности ввода
cout << x << endl;
//if(x == -1) break; // если считывание прошло неудачно прерываем цикл, кстати это не работает на данном ресурсе, поэтому проверка признака конца файла встроена в цикл.
if(x % 14 == 0){// если новое число делится на 14
n = x * m;
if(m != 0 && n > result){//если его произведение с максимальным найденным числом больше текущего результата - меняем результат
result = n;
}
//m14 = max(m14, x); // запоминаем максимальное из чисел делящехся на 14, найденое ранее или текущее. эта переменная лишняя, т.к. случай с ней мы уже обработалии последний ваш блок ветвления можн, а значит нужно не выполнять.
}else
if(x % 7 == 0 /* && x % 2 != 0 лишнее условие, т.к. оно УЖЕ не делится на 14*/){// если новое число делится на 7
n = m2 * x;
if(m2 != 0 && n > result){ //если его произведение с максимальным найденным числом, делящимся на 2 больше текущего результата - меняем результат
result = n;
}
m7 = max(m7, x); // запоминаем максимальное из чисел делящехся на 7, найденое ранее или текущее.
}else
if(/*x % 7 != 0 && снова лишнее условие, мы уже знаем, что x не делится на 14 и на 7*/x % 2 == 0){
n = m7 * x;
if(m7 != 0 && n> result){ //если его произведение с максимальным найденным числом, делящимся на 7 больше текущего результата - меняем результат
result = m7 * x;
}
m2 = max(m2, x); // запоминаем максимальное из чисел делящехся на 2, найденое ранее или текущее.
}/*else //if(x % 7 != 0 && x % 2 != 0) - лишнее, мы уже знаем, что число не делиться ни на 14, ни на 7 ни на 2
{
n = m14 * x;
if(m14 != 0 && n > result){//если его произведение с максимальным найденным числом, делящимся на 14 больше текущего результата - меняем результат
result = n;
}
} - этот блок лишний целиком, т.к. этот случай вы уже обработали в самом первом блоку ветвления*/
m = max(m, x); // запоминаем максимальное из чисел введенных, найденое ранее или текущее.
}
input.close();
cout << result << endl;
return 0;
}
5
40
1000
7
28
55