uses crt; var i,j,k,n,sum:integer; a:array[1..100] of integer; flag:boolean; begin flag:=false; writeln('Input N'); read(n); writeln('Input elements'); for i:=1 to n do read(a[i]); for i:=1 to n do for j:=1 to n do for k:=1 to n do if (i<>j) and (j<>k) and (i<>k) then if a[i]+a[j]+a[k]=0 then begin writeln('Yes'); flag:=true; halt; end; if flag=false then writeln('No'); end.
Значит так: мы создаем массив избыточной длины, куда потом будем записывать рандомные числа. Так же мы создаем массив-счетчик b (у него индексами являются сами числа, а элементами - количество этого числа в массиве А), куда будет присваиваться, сколько раз нам встречается то или иное число (перед этим мы массив обязательно обнулим). В конце мы смотрим максимальное число из массива-счетчика. Вуаля!
Вот пример программы на паскале ABC:
var a:array [1..1000000] of integer; b:array [1..10] of longint; c:integer; i,max,n:longint; begin write('Введите число элементов массива: '); readln(n); max:=0; for i:=1 to 10 do b[i]:=0; for i:=1 to n do begin a[i]:=random(10)+1; write(a[i],' '); b[a[i]]:=b[a[i]]+1 end; for i:=1 to 10 do if b[i]>max then begin c:=i; max:=b[i] end; writeln; writeln('Чаще всего в массиве встречается число ',c) end.
Немного теории. Для того, чтобы избежать переполнения разрядной сетки, значение квадрата натурального числа не должно превышать максимального числа, представимого выбранным типом данных. В языке Паскаль числа типа longint записываются в четырех байтах в дополнительном коде, т.е. максимальное значение числа не может превышать 2³¹-1. Тогда максимальное натуральное число, квадрат которого мы можем вычислить, равно целой части от величины:
//PascalABC.Net 3.0, сборка 1066 var s:string; i,n,lim,l:longint; begin lim:=Trunc(exp(15.5*ln(2))); Write('Введите номер позиции: '); Read(n); i:=0; l:=0; while (l<n) and (i<=lim) do begin Inc(i); Str(i*i,s); l:=l+Length(s); end; if i<=lim then Writeln('Искомая цифра- ',s[Length(s)-l+n]) else Writeln('Решения в типе данных longint невозможно') end.
Тестовое решение: Введите номер позиции: 4 Искомая цифра- 1
var i,j,k,n,sum:integer;
a:array[1..100] of integer;
flag:boolean;
begin
flag:=false;
writeln('Input N');
read(n);
writeln('Input elements');
for i:=1 to n do
read(a[i]);
for i:=1 to n do
for j:=1 to n do
for k:=1 to n do
if (i<>j) and (j<>k) and (i<>k) then
if a[i]+a[j]+a[k]=0 then
begin
writeln('Yes');
flag:=true;
halt;
end;
if flag=false then
writeln('No');
end.