В задаче имеется "топорное решение" — посчитать напрямую. Получившееся число будет восьмизначным, что не так уж и страшно, если в голову не приходят другие решения.
Рассмотрим, однако, решение, которое позволит делать подобные задачи без прямого подсчёта. Для этого, прежде всего, переведём всё в степени тройки:
Как представляется число 3n в троичной системе счисления? Давайте подумаем, как мы переводим из десятичной системы в троичную? Сначала делим на 3, затем частное делим на 3, затем новое частное на 3 и т.п. Что получится в случае деления 3n на 3? Очевидно, что 3n-1. А если его поделить дальше на 3, то получится 3n-2. Если так сделать n раз, то в конце останется 30, то есть. Таким образом, это будет число 100..00, где количество нулей равно n.
То есть, например, 8-ая степени тройки в троичной системе представима в виде 1000000003. А 35 — это 1000003.
Вернёмся теперь к нашей сумме. Давайте сначала в столбик сложим 316 и 35 в троичной системе счисления.
Теперь остаётся из этого вычесть 32. Для этого придётся "занять" разряд. Но принцип тут такой же, как и в обычной, десятичной системе счисления, только 0 будут превращаться не в 9, а в 2 (самую большую цифру в троичной системе счисления:
Const N = 4; M = 6; Var A:array[1..N,1..M] of integer; B:array[1..N] of integer; i,j,k:integer; C:real; Begin WriteLn('Введите массив:'); For i:= 1 to N do For j:= 1 to M do Read(A[i,j]); WriteLn; Write('Введите число: ');ReadLn(C); For i:= 1 to N do Begin k:=0; For j:= 1 to M do if C<A[i,j] then k:=k+1; B[i]:=k; End; WriteLn; For i:= 1 to N do Write(B[i],' ') End.
Рассмотрим, однако, решение, которое позволит делать подобные задачи без прямого подсчёта. Для этого, прежде всего, переведём всё в степени тройки:
98328316+35+35+35−9−32−32==
9
8
+
3
5
−9 =
3
2
8
+
3
5
−
3
2
=
3
16
+
3
5
−
3
2
Как представляется число 3n в троичной системе счисления? Давайте подумаем, как мы переводим из десятичной системы в троичную? Сначала делим на 3, затем частное делим на 3, затем новое частное на 3 и т.п. Что получится в случае деления 3n на 3? Очевидно, что 3n-1. А если его поделить дальше на 3, то получится 3n-2. Если так сделать n раз, то в конце останется 30, то есть. Таким образом, это будет число 100..00, где количество нулей равно n.
То есть, например, 8-ая степени тройки в троичной системе представима в виде 1000000003. А 35 — это 1000003.
Вернёмся теперь к нашей сумме. Давайте сначала в столбик сложим 316 и 35 в троичной системе счисления.
100…000000016100000100…0⏟10100000 1
00
…
0000000
⏞
16
100000 1
00
…
0
⏟
10
100000
Теперь остаётся из этого вычесть 32. Для этого придётся "занять" разряд. Но принцип тут такой же, как и в обычной, десятичной системе счисления, только 0 будут превращаться не в 9, а в 2 (самую большую цифру в троичной системе счисления:
100…0⏞10100000−100100…0⏟10022200 1
00
…
0
⏞
10
100000 −100 1
00
…
0
⏟
10
022200
Таким образом, количество двоек в указанной сумме получилось равным 3.
ответ: 3 двойки в троичной записи.
N = 4;
M = 6;
Var
A:array[1..N,1..M] of integer;
B:array[1..N] of integer;
i,j,k:integer;
C:real;
Begin
WriteLn('Введите массив:');
For i:= 1 to N do
For j:= 1 to M do
Read(A[i,j]);
WriteLn;
Write('Введите число: ');ReadLn(C);
For i:= 1 to N do
Begin
k:=0;
For j:= 1 to M do
if C<A[i,j] then k:=k+1;
B[i]:=k;
End;
WriteLn;
For i:= 1 to N do
Write(B[i],' ')
End.
Пример:
Введите массив:
4 6 2 6 -6 -6
5 2 7 -3 6 -3
-2 -8 -1 3 4 1
-8 -5 -4 10 -5 6
Введите число: 4
2 3 0 2