int ZerosInArray(int a[], int n) { int k; for (int i = 0; i < n; i++)if (a[i] == 0) k++; return k; }
int main() { int N = 10; int a[N]; int k; srand(time(NULL)); for (int i = 0; i < N; i++) { a[i] = rand() % 5 - 3; printf("%d ", a[i]); } k = ZerosInArray(a, N); printf("%s%d", "\nZeros = ", k); return 0; }
Из условия Фано следует, что в префиксном неравномерном двоичном коде, предусматривающем однозначное декодирование, ни одно кодовое слово не может быть началом другого.
Таким образом, оставшиеся три кода не могут быть началом кода буквы Б, и началами кодов друг друга.
То есть коды 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
#include <time.h>
int ZerosInArray(int a[], int n)
{
int k;
for (int i = 0; i < n; i++)if (a[i] == 0) k++;
return k;
}
int main()
{
int N = 10;
int a[N];
int k;
srand(time(NULL));
for (int i = 0; i < N; i++)
{
a[i] = rand() % 5 - 3;
printf("%d ", a[i]);
}
k = ZerosInArray(a, N);
printf("%s%d", "\nZeros = ", k);
return 0;
}