Из условия Фано следует, что в префиксном неравномерном двоичном коде, предусматривающем однозначное декодирование, ни одно кодовое слово не может быть началом другого.
Таким образом, оставшиеся три кода не могут быть началом кода буквы Б, и началами кодов друг друга.
То есть коды 0 и 00 отпадают сразу, т.к. это начала буквы Б.
Если предположить, что один из кодов равен 1, и что нам нужны кратчайшие коды, значит оставшиеся коды могут быть только 01 и 011.
Если предположить, что коды двузначны, тогда кодами могут быть 01, 10 и 11.
В первом случае суммарная длина кодов равна 1+2+3+3 = 9, во втором случае - 2+2+2+3 = 9.
Оба варианта подходят, кратчайшая суммарная длина - 9
Таким образом, оставшиеся три кода не могут быть началом кода буквы Б, и началами кодов друг друга.
То есть коды 0 и 00 отпадают сразу, т.к. это начала буквы Б.
Если предположить, что один из кодов равен 1, и что нам нужны кратчайшие коды, значит оставшиеся коды могут быть только 01 и 011.
Если предположить, что коды двузначны, тогда кодами могут быть 01, 10 и 11.
В первом случае суммарная длина кодов равна 1+2+3+3 = 9, во втором случае - 2+2+2+3 = 9.
Оба варианта подходят, кратчайшая суммарная длина - 9
// Поскольку о работе с комплексными числами не говорилось, написал метод для решения квадратного уравнения в вещественных числах (d >= 0).
// Solve -- метод, обеспечивающий решение.
using System;
namespace ConsoleApp1
{
internal class Program
{
private static void Main(string[] args)
{
double a, b, c;
Console.Write("a = ");
a = double.Parse(Console.ReadLine());
Console.Write("b = ");
b = double.Parse(Console.ReadLine());
Console.Write("c = ");
c = double.Parse(Console.ReadLine());
if (a == 0)
{
Console.WriteLine("incorrect data");
return;
}
Console.WriteLine();
Solve(a, b, c);
Console.ReadLine();
}
private static void Solve(double a, double b, double c)
{
double d = b * b - 4 * a * c;
if (d < 0)
{
Console.WriteLine("No solutions");
return;
}
double sd = Math.Sqrt(d);
double x1 = (-b + sd) / (2 * a);
double x2 = (-b - sd) / (2 * a);
if (d == 0)
{
Console.WriteLine($"x = {x1}");
return;
}
Console.WriteLine($"x1 = {x1}");
Console.WriteLine($"x2 = {x2}");
}
}
}