Для заданного массива, состоящего из 100 целых чисел, сначала вывести все числа, встречающиеся в нем несколько раз, а затем все числа, встречающиеся в нем только один раз.
Основная идея: во вс массиве p строим двусвязный список, элементы которого указывают на предка и потомка члена массива, имеющего такое же значение. Сначала выводим элементы, имеющие потомков, но не имеющие предков - это будут элементы, которые встречаются более одного раза, а их порядок следования совпадет с порядком следования в массиве. Затем выводим элементы, которые не имеют ни предков, ни потомков, т.е. встречаются в массиве один раз.
const n = 100;
var a: array[1..n] of integer; p: array[1..n, 1..2] of integer; {3 - индекс предыдущего элемента 4 - индекс следующего элемента} i, j, e: integer;
begin Randomize; for i := 1 to n do begin e := Random(51) - 25; a[i] := e; p[i, 1] := 0; p[i, 2] := 0 end; for i := 2 to n do begin j := i - 1; e := a[i]; repeat if e = a[j] then begin p[j, 1] := i; p[i, 2] := j; j := 0 end else j := j - 1 until j = 0 end; for i := 1 to n do if (p[i, 1] > 0) and (p[i, 2] = 0) then write(a[i]:4); for i := 1 to n do if (p[i, 1] = 0) and (p[i, 2] = 0) then write(a[i]:4); writeln end.
К сожалению, ты не написал на каком тебе надо языке, я выбрал JavaScript 1) var array = [4,5,10,-10,5]; var min = 1000000; for (var i = 0; i < 5; i++) { if (min>array[i]) { min = array[i]; } } alert("Минимальный элемент + "min);
2)var array = []; for (var i = 0; i < 5; i++) { var number = prompt("Введите число"); array.push(number); } alert("Ваш массив " + array); var min = 1000; var max = 0; for (var j = 0; j < 5; j++) { if (min > array[j]) { min = array[j]; } } alert("Минимум = " + min); for (var k = 0; k < 5; k++) { if (max < array[k]) { max = array[k]; } } alert("Максимум = " + max);
// PascalABC.NET 3.3, сборка 1579 от 18.11.2017 // Внимание! Если программа не работает, обновите версию!
Нулевой шаг: создание типизированного файла нужной структуры
begin var f:file of real; Assign(f,'MyReal.bin'); Rewrite(f); loop 2 do begin SeqRandomInteger(10,1,100).Select(t->t/10).ForEach(t->Write(f,t)); SeqRandomInteger(10,-100,-1).Select(t->t/10).ForEach(t->Write(f,t)); end; f.Seek(0); // начало файла var b:real; while not Eof(f) do begin Read(f,b); Print(b) end; Println; f.Close end.
begin var f1,f2:file of real; Assign(f1,'MyReal.bin'); Reset(f1); if f1.FileSize mod 20<>0 then begin Writeln('Количество компонент во входном файле не кратно 20'); Exit end; Assign(f2,'MyReal2.bin'); Rewrite(f2); var buf:=new real[5]; var b:real; while not Eof(f1) do begin // переписываем пять положительных loop 5 do begin Read(f1,b); Write(f2,b) end; // считываем пять положительных в буфер for var i:=0 to 4 do Read(f1,buf[i]); // переписываем пять отрицательных loop 5 do begin Read(f1,b); Write(f2,b) end; // пишем пять положительных из буфера foreach var t in buf do Write(f2,t); // переписываем пять отрицательных loop 5 do begin Read(f1,b); Write(f2,b) end end; f1.Close; // контрольное чтение f2.Seek(0); // к началу while not Eof(f2) do begin Read(f2,b); Print(b) end; Writeln; f2.Close end.
const
n = 100;
var
a: array[1..n] of integer;
p: array[1..n, 1..2] of integer;
{3 - индекс предыдущего элемента
4 - индекс следующего элемента}
i, j, e: integer;
begin
Randomize;
for i := 1 to n do
begin
e := Random(51) - 25;
a[i] := e;
p[i, 1] := 0;
p[i, 2] := 0
end;
for i := 2 to n do
begin
j := i - 1;
e := a[i];
repeat
if e = a[j] then
begin
p[j, 1] := i;
p[i, 2] := j;
j := 0
end
else
j := j - 1
until j = 0
end;
for i := 1 to n do
if (p[i, 1] > 0) and (p[i, 2] = 0) then write(a[i]:4);
for i := 1 to n do
if (p[i, 1] = 0) and (p[i, 2] = 0) then write(a[i]:4);
writeln
end.
Тестовое решение:
-15 -21 -4 24 20 16 4 14 3 1 25 -9 -14 10 12 -13 9 -2 -16 -10 -25 21 2 8 15 -1 19 22 18 -23 6 -6 -17 -24 17 -20 -7 -12 -19 -3 7 23