{Attention! Это самое отвратное моё решение на Знаниях. Запаситесь валерьянкой перед прочтением кода} //Pascal ABC.NET 3.1 сборка 1219
Type ty=record valu:integer; count:integer; end;
Const n=3;
Var ma:array[1..n,1..n] of integer; tyar:array of ty; se:set of integer; i,j,z,k,MaxCount:integer; begin randomize; se:=[]; k:=0; MaxCount:=integer.MinValue; writeln('Matrix:'); for i:=1 to n do begin for j:=1 to n do begin ma[i,j]:=random(-10,10); write(ma[i,j]:4); if not(ma[i,j] in se) then begin inc(k); setlength(tyar,k+1); tyar[k].valu:=ma[i,j]; tyar[k].count:=1; se:=se+[ma[i,j]]; end else for z:=1 to k do {O(n^3) в худшем случае - нормальные люди ненавидят это} if tyar[z].valu=ma[i,j] then begin inc(tyar[z].count); break; end; end; writeln; end; for i:=1 to k do if MaxCount<tyar[i].count then MaxCount:=tyar[i].count; writeln('Res:'); for i:=1 to k do if tyar[i].count=MaxCount then writeln(tyar[i].valu); end.
Пример работы программы: Matrix: -7 -2 10 8 0 -2 6 10 1 Res: -2 10
av52nazarov
04.02.2021
Можно воспользоваться преимуществами, которые дает Pascal 3.1 и программа будет достаточно короткой.
// PascalABC.NET 3.1, сборка 1250 от 28.05.2016 begin var m:=ReadInteger('m='); var c:=MatrixRandom(m,m,10,99); var d:=new Dictionary<integer,integer>; for var i:=0 to m-1 do begin for var j:=0 to m-1 do Print(c[i,j]); Println; end; foreach var e in c do d[e]:=d.Get(e)+1; var q:=d.OrderByDescending(x->x.Value); var p:=q.First.Value; if p=1 then Writeln('Все значения в массиве уникальны') else begin var s:=q.TakeWhile(x->x.Value=p).Select(x->x.Key); Write('Наиболее часто (',p,') '); if s.Count=1 then begin Print('встречается значение'); s.Print end else begin Print('встречаются значения:'); s.Println end end end.
Тестовые решения
m= 3 76 34 96 47 99 79 94 33 11 Все значения в массиве уникальны
m= 5 43 19 46 70 51 73 46 50 18 25 19 10 32 83 81 32 46 81 23 84 27 91 84 79 28 Наиболее часто (3) встречается значение 46
//Pascal ABC.NET 3.1 сборка 1219
Type
ty=record
valu:integer;
count:integer;
end;
Const
n=3;
Var
ma:array[1..n,1..n] of integer;
tyar:array of ty;
se:set of integer;
i,j,z,k,MaxCount:integer;
begin
randomize;
se:=[];
k:=0;
MaxCount:=integer.MinValue;
writeln('Matrix:');
for i:=1 to n do
begin
for j:=1 to n do
begin
ma[i,j]:=random(-10,10);
write(ma[i,j]:4);
if not(ma[i,j] in se) then
begin
inc(k);
setlength(tyar,k+1);
tyar[k].valu:=ma[i,j];
tyar[k].count:=1;
se:=se+[ma[i,j]];
end
else
for z:=1 to k do {O(n^3) в худшем случае - нормальные люди ненавидят это}
if tyar[z].valu=ma[i,j] then
begin
inc(tyar[z].count);
break;
end;
end;
writeln;
end;
for i:=1 to k do
if MaxCount<tyar[i].count then MaxCount:=tyar[i].count;
writeln('Res:');
for i:=1 to k do if tyar[i].count=MaxCount then writeln(tyar[i].valu);
end.
Пример работы программы:
Matrix:
-7 -2 10
8 0 -2
6 10 1
Res:
-2
10