Пусть в "долях" a <= b <= c вершин, и проведены все рёбра между разными "долями". Так как из каждой вершины, лежащей в первой "доле", можно провести только b + c рёбер, из второй доли — a + c рёбер, из третьей — a + b рёбер, то общее количество рёбер равно (a * (b + c) + b * (a + c) + c * (a + b))/2 = ab + ac + bc (деление на 2 возникает из-за того, что каждое ребро подсчитывается дважды).Нужны такие a, b, c, при которых значение выражения ab + bc + ac будет максимально. Максимальное значение можно найти перебором. python 3:max_value = 0 for a in range(41//3 + 1): for b in range(a, (41 - a)//2 + 1): c = 41 - a - b value = a * b + a * c + b * c max_value = max(max_value, value) print(max_value) ответ. 560.
Словесный: получим значения a, b и c, вычислим дискриминант по формуле D := b * b - 4 * a * c, Вычислим корни по формуле X := (-1 * b + sqrt(D) )/ 2 * a
Надеюсь в блок-схеме разберешься какие скобки какую фигуру обозначают... В этих алгоритмах я брал только случаи, когда D строго больше нуля. Ты можешь дополнительно добавить ветвление после нахождения D и добавить все условия. Я просто на этом окне никак это не сделаю. Программа будет с ветвлением.
Программа: var a, b, c, D, X: real; begin write('Введите A: '); read(a); write('Введите B: '); read(b); write('Введите C: '); read(c); D := sqr(b) - 4 * a * c; if D > 0 then begin X := (-1 * b + sqrt(D)) / 2 * a; writeln('X1 = ', X); X := (-1 * b - sqrt(D)) / 2 * a; writeln('X2 = ', X); end else if D = 0 then begin X := (-1 * b + sqrt(D)) / 2 * a; write('X = ', X); end else write('Корней нет!'); end.
python 3:max_value = 0 for a in range(41//3 + 1): for b in range(a, (41 - a)//2 + 1): c = 41 - a - b value = a * b + a * c + b * c max_value = max(max_value, value) print(max_value)
ответ. 560.