Один переключатель имеет 3! комбинаций значит 9 будет иметь 3!*9!
Если считать, что используется однобайтная кодировка типа ASCII, то один символ кодируется одним байтом.
Тогда для строки потребуется 64×1 = 64 б, для страницы 48×64 = 3 072 б = 3 072 / 1 024 = 3 Кб, а весь учебник займет 512 × 3 = 1 536 Кб
Школьная библиотека разместится в 50 000 × 1536 = 76 800 000 Кб =
76 800 000 / 1024 = 75 000 Мб = 75 000 / 1024 ≈ 73.24 Гб
Количество дисков составит 75 000 / 700 ≈ 107.1, т.е. 108.
<h3>PascalABC.NET 3.4.2, сборка 1881 от 19.11.2018</h3><h3>Внимание! Если программа не работает, обновите версию!</h3>
begin
var n := ReadlnInteger('N=');
var R := new integer[n];
repeat
var a := ReadlnString.ToCharArray;
if a.Length <> N then break;
if a.Where(c -> c = '+').Count = 1 then
Inc(R[a.IndexOf('+')])
until False;
R.Transform(t -> t >= 0.07 * N ? 1 : 0);
R.Numerate.Where(t -> t[1] = 1).Select(t -> t[0]).Println
end.
<h3>Пример</h3>
(окончание ввода - строка длины отличной от N)
N= 5
-+---
--+--
-+---
+----
-+---
--+--
-+---
+----
----+
-+---
1 2 3 5
Char
shortint или byte
smallint или word
smallint или word
single
string
single или real
На практике все это в настоящее время - анахронизм. Для целочисленных значений обычно используют integer, для вещественных - real.
Это позволяет во-первых, не загружать голову проблемой, что в какой-то момент результат операции не поместится в отведенные рамки, во-вторых, позволяет компилятору получать более быстрый код (данные не надо преобразовывать к какому-то типу для вычисления, а потом назад).
Если вычисляется (byte)*(smallint)+(integer) div (shortint), какого типа данные нужно выбирать компилятору для промежуточных значений и результата? А вот если все данные одного типа integer, то и думать не о чем.