Найти максимальный по модулю элемент в массиве с уникальными по модулю значениями
Авторgospodaretsva.comПросмотров6.1к.Обновлено
ЗАДАЧА
Заполнить массив случайными положительными и отрицательными числами таким образом, чтобы все числа по модулю были разными. Это значит, что в массиве не может быть ни только двух равных чисел, но не может быть двух равных по модулю. В полученном массиве найти наибольшее по модулю число.
Абсолютное значение каждого нового числа перед помещением в массив надо сравнить с абсолютными значениями всех чисел, которые уже были добавлены в массив. Если хотя бы в одном сравнении числа совпадут, то новое число не следует добавлять в массив. Если же совпадений не было, то число добавляется массив по текущему индексу, после чего индекс увеличивается на 1.
Поиск же максимума по модулю отличается от обычного лишь тем, что сравниваются абсолютные значения элементов массива.
Pascal
const N = 15;
var
arr: array[1..N] of integer;
i, j: byte;
m: integer;
flag: boolean;
begin
randomize;
arr[1] := random(40) - 20;
i := 2;
while i <= N do begin
m := random(40) - 20;
flag := true;
for j:=1 to i-1 do
if abs(arr[j]) = abs(m) then begin
flag := false;
break;
end;
if flag = true then begin
arr[i] := m;
i := i + 1;
end;
end;
j := 1;
for i:=1 to N do begin
write(arr[i]:4);
if abs(arr[i]) > abs(arr[j]) then
j := i;
end;
writeln;
writeln('Максимальный по модулю ', j, '-й элемент равен ', arr[j]);
end.
#include
#define N 15
main() {
int arr[N], m;
char i,j,f;
srand(time(NULL));
arr[0] = rand()%40 - 20;
i = 1;
while (i < N) {
m = rand()%40 - 20;
f = 1;
for (j=0; j < i; j++)
if (abs(arr[j]) == abs(m)) {
f = 0;
break;
}
if (f == 1) {
arr[i] = m;
i += 1;
}
}
j = 0;
for (i=0; i < N; i++) {
printf("%d ", arr[i]);
if (abs(arr[i]) > abs(arr[j]))
j = i;
}
printf("\n");
printf("Максимальный по модулю %d-й элемент равен %d\n", j, arr[j]);
}
from random import random
N = 15
m = int(random() * 40) - 20
arr = [m]
i = 1
while i < N:
m = int(random() * 40) - 20
f = 1
for j in arr:
if abs(j) == abs(m):
f = 0
break
if f == 1:
arr.append(m)
i += 1
print(arr)
j = 0
for i in range(1, 15):
if abs(arr[i]) > abs(arr[j]):
j = i
print('Максимальный по модулю %d-й элемент равен %d' % (j,arr[j]))
алг максимальный уникальный
нач
цел N = 15
цел таб arr[1:N]
цел i,j,m,f
arr[1] := int(rand(0,40)) - 20
i := 2
нц пока i <= N
m := int(rand(0,40)) - 20
f := 1
нц для j от 1 до i-1
если abs(arr[j]) = abs(m) то
f := 0
выход
все
кц
если f = 1 то
arr[i] := m
i := i + 1
все
кц
j := 1;
нц для i от 1 до N
вывод arr[i], " "
если abs(arr[i]) > abs(arr[j]) то
j := i
все
кц
вывод нс, "Максимальные по модулю ", j, "-й элемент равен ", arr[j]
кон
17 14 -18 13 5 10 7 -9 -1 -6 -12 2 4 -3 0
Максимальные по модулю 3-й элемент равен -18
Basic-256
N = 15
dim arr(N)
arr[0] = int(rand*40) - 20
i = 1
while i < N
m = int(rand*40) - 20
f = 1
for j=0 to i-1
if abs(arr[j]) = abs(m) then
f = 0
endif
next j
if f = 1 then
arr[i] = m
i = i + 1
endif
endwhile
j = 0
for i=0 to N-1
print arr[i] + " ";
if abs(arr[i]) > abs(arr[j]) then
j = i
endif
next i
print
print "Максимальный по модулю " + j + "-й элемент равен " + arr[j]
const N = 15; var arr: array[1..N] of integer; i, j: byte; m: integer; flag: boolean; begin randomize; arr[1] := random(40) - 20; i := 2; while i abs(arr[j]) then j := i; end; writeln; writeln('Максимальный по модулю ', j, '-й элемент равен ', arr[j]); end.
#include #define N 15 main() { int arr[N], m; char i,j,f; srand(time(NULL)); arr[0] = rand()%40 - 20; i = 1; while (i < N) { m = rand()%40 - 20; f = 1; for (j=0; j < i; j++) if (abs(arr[j]) == abs(m)) { f = 0; break; } if (f == 1) { arr[i] = m; i += 1; } } j = 0; for (i=0; i < N; i++) { printf("%d ", arr[i]); if (abs(arr[i]) > abs(arr[j])) j = i; } printf("\n"); printf("Максимальный по модулю %d-й элемент равен %d\n", j, arr[j]); }
from random import random N = 15 m = int(random() * 40) - 20 arr = [m] i = 1 while i < N: m = int(random() * 40) - 20 f = 1 for j in arr: if abs(j) == abs(m): f = 0 break if f == 1: arr.append(m) i += 1 print(arr) j = 0 for i in range(1, 15): if abs(arr[i]) > abs(arr[j]): j = i print('Максимальный по модулю %d-й элемент равен %d' % (j,arr[j]))
алг максимальный уникальный нач цел N = 15 цел таб arr[1:N] цел i,j,m,f arr[1] := int(rand(0,40)) - 20 i := 2 нц пока i abs(arr[j]) то j := i все кц вывод нс, "Максимальные по модулю ", j, "-й элемент равен ", arr[j] кон
17 14 -18 13 5 10 7 -9 -1 -6 -12 2 4 -3 0 Максимальные по модулю 3-й элемент равен -18
Basic-256
N = 15 dim arr(N) arr[0] = int(rand*40) - 20 i = 1 while i < N m = int(rand*40) - 20 f = 1 for j=0 to i-1 if abs(arr[j]) = abs(m) then f = 0 endif next j if f = 1 then arr[i] = m i = i + 1 endif endwhile j = 0 for i=0 to N-1 print arr[i] + " "; if abs(arr[i]) > abs(arr[j]) then j = i endif next i print print "Максимальный по модулю " + j + "-й элемент равен " + arr[j]