Самый основной изолировать предложенные варианты это просто взглянуть на первые две цифры и понять - могут ли они указывать на число вместе и по отдельности?
Таким образом:
1) 13102 может быть и 1 и 13
2) 29321 может быть 2 и 29
3) 171020 может быть 1 и 17
Однако:
4) 43301 может быть только 4 буква алфавита, потому что 43 буквы нет.
При этом дальше мы можем взять только 3, но не можем 33, потому что если взять 33 как последнюю букву алфавита, то следующая буква будет 0, чего быть не может, в результате чего это действительно единственный расшифровки данного набора цифр.
var pos,neg: integer; i,k,x: integer; ev,un: integer; a,b: array [1..n] of integer;
begin for i := 1 to n do read(a[i]); k := 0; pos := 0; neg := 0; for i := 1 to n do begin ev := 0; un := 0; x := a[i]; if x <> 0 then if x > 0 then if (x < pos) or (pos = 0) then pos := x else else if (x > neg) or (neg = 0) then neg := x; x := abs(x); while x <> 0 do begin if odd(x) then un := un + 1 else ev := ev + 1; x := x div 10 end; if un = ev then begin k := k + 1; b[k] := a[i] end end;
writeln(pos,' ',neg); for i := 1 to k do write(b[i],' ') end.
4) 43301 или ГВЬА
Объяснение:
Самый основной изолировать предложенные варианты это просто взглянуть на первые две цифры и понять - могут ли они указывать на число вместе и по отдельности?
Таким образом:
1) 13102 может быть и 1 и 13
2) 29321 может быть 2 и 29
3) 171020 может быть 1 и 17
Однако:
4) 43301 может быть только 4 буква алфавита, потому что 43 буквы нет.
При этом дальше мы можем взять только 3, но не можем 33, потому что если взять 33 как последнюю букву алфавита, то следующая буква будет 0, чего быть не может, в результате чего это действительно единственный расшифровки данного набора цифр.
n = 20;
var
pos,neg: integer;
i,k,x: integer;
ev,un: integer;
a,b: array [1..n] of integer;
begin
for i := 1 to n do
read(a[i]);
k := 0;
pos := 0;
neg := 0;
for i := 1 to n do
begin
ev := 0;
un := 0;
x := a[i];
if x <> 0 then
if x > 0 then
if (x < pos) or (pos = 0) then
pos := x
else
else
if (x > neg) or (neg = 0) then
neg := x;
x := abs(x);
while x <> 0 do
begin
if odd(x) then
un := un + 1
else
ev := ev + 1;
x := x div 10
end;
if un = ev then
begin
k := k + 1;
b[k] := a[i]
end
end;
writeln(pos,' ',neg);
for i := 1 to k do
write(b[i],' ')
end.