Если лень перебирать вручную, можно воспользоваться программой
var k,l,r,x,f:integer; begin f := 3001; l := 0; r := 65534; x := (l + r) div 2; k := 1; while (x <> f) and (l < r) do begin writeln(k,' ',l,' ',r,' ',x); k := k + 1; if f < x then r := x - 1 else l := x + 1; x := (l + r) div 2 end; writeln(k,' ',l,' ',r,' ',x); end.
// PascalABC.NET 3.1, сборка 1219 от 16.04.2016 type Matrix=array[,] of integer;
procedure MatPrint(a:Matrix); begin var m:=Length(a,1)-1; for var i:=0 to Length(a,0)-1 do begin for var j:=0 to m do Write(a[i,j]:4); Writeln end end;
function IsEqual(a:Matrix; col:integer):boolean; begin var s:=sign(a[0,col]); for var i:=1 to Length(a,0)-1 do s+=sign(a[i,col]); if (s=0) then Result:=(a[0,col]<>0) else Result:=false end;
procedure DeleteCol(var a:Matrix; col:integer); begin var n:=Length(a,0)-1; var m:=Length(a,1)-1; for var j:=col+1 to Length(a,1)-1 do for var i:=0 to n do a[i,j-1]:=a[i,j]; SetLength(a,n+1,m) end;
begin var n:=ReadInteger('Строк:'); var m:=ReadInteger('Столбцов:'); var a:=MatrixRandom(n,m,-99,99); Writeln('Исходная матрица'); MatPrint(a); for var j:=Length(a,1)-1 downto 0 do if IsEqual(a,j) then DeleteCol(a,j); Writeln('Результирующая матрица'); MatPrint(a); end.
1. 0..65534 -> 32767
2. 0..32766 -> 16383
3. 0..16382 -> 8191
4. 0..8190 -> 4095
5. 0..4094 -> 2047
6. 2048..4094 -> 3071
7. 2048..3070 -> 2559
8. 2560..3070 -> 2815
9. 2816..3070 -> 2943
10. 2944..3070 -> 3007
11. 2944..3006 -> 2975
12. 2976..3006 -> 2991
13. 2992..3006 -> 2999
14. 3000..3006 -> 3003
15. 3000..3002 -> 3001
Если лень перебирать вручную, можно воспользоваться программой
var k,l,r,x,f:integer;
begin
f := 3001;
l := 0;
r := 65534;
x := (l + r) div 2;
k := 1;
while (x <> f) and (l < r) do
begin
writeln(k,' ',l,' ',r,' ',x);
k := k + 1;
if f < x then r := x - 1
else l := x + 1;
x := (l + r) div 2
end;
writeln(k,' ',l,' ',r,' ',x);
end.
type
Matrix=array[,] of integer;
procedure MatPrint(a:Matrix);
begin
var m:=Length(a,1)-1;
for var i:=0 to Length(a,0)-1 do begin
for var j:=0 to m do Write(a[i,j]:4);
Writeln
end
end;
function IsEqual(a:Matrix; col:integer):boolean;
begin
var s:=sign(a[0,col]);
for var i:=1 to Length(a,0)-1 do s+=sign(a[i,col]);
if (s=0) then Result:=(a[0,col]<>0)
else Result:=false
end;
procedure DeleteCol(var a:Matrix; col:integer);
begin
var n:=Length(a,0)-1;
var m:=Length(a,1)-1;
for var j:=col+1 to Length(a,1)-1 do
for var i:=0 to n do a[i,j-1]:=a[i,j];
SetLength(a,n+1,m)
end;
begin
var n:=ReadInteger('Строк:');
var m:=ReadInteger('Столбцов:');
var a:=MatrixRandom(n,m,-99,99);
Writeln('Исходная матрица');
MatPrint(a);
for var j:=Length(a,1)-1 downto 0 do
if IsEqual(a,j) then DeleteCol(a,j);
Writeln('Результирующая матрица');
MatPrint(a);
end.
Тестовое решение
Строк: 8
Столбцов: 10
Исходная матрица
-3 -82 -25 -22 65 1 79 -67 -64 -82
17 36 48 -32 51 11 43 9 -35 4
-10 -5 80 82 -24 66 -12 -58 50 -94
52 70 53 85 -32 -59 46 57 -84 -44
81 71 -55 37 46 -15 -61 25 22 -7
-49 98 -42 -18 -44 -97 -63 -7 -98 99
-86 37 -17 -69 -35 46 82 62 99 11
65 85 -7 -90 23 19 -50 -56 -64 91
Результирующая матрица
-82 -25 -22 1 -64
36 48 -32 11 -35
-5 80 82 66 50
70 53 85 -59 -84
71 -55 37 -15 22
98 -42 -18 -97 -98
37 -17 -69 46 99
85 -7 -90 19 -64