Найти максимальный по модулю элемент в массиве с уникальными по модулю значениями

Задача

Заполнить массив случайными положительными и отрицательными числами таким образом, чтобы все числа по модулю были разными. Это значит, что в массиве не может быть ни только двух равных чисел, но не может быть двух равных по модулю. В полученном массиве найти наибольшее по модулю число.

Пояснение к задаче и алгоритм решения

Абсолютное значение каждого нового числа перед помещением в массив надо сравнить с абсолютными значениями всех чисел, которые уже были добавлены в массив. Если хотя бы в одном сравнении числа совпадут, то новое число не следует добавлять в массив. Если же совпадений не было, то число добавляется массив по текущему индексу, после чего индекс увеличивается на 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.

Пример(ы) выполнения программы на языке Pascal

  -1   6 -17  -2   5 -12 -16  -8 -18   9   7  -4 -13 -19  14
Максимальный по модулю 14-й элемент равен -19

Исходный код на языке программирования C

#include <stdio.h>
#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]);
}

Пример(ы) выполнения программы на языке C

-2 17 -15 -11 -19 -5 -4 12 13 -3 0 7 -18 -20 8
Максимальный по модулю 13-й элемент равен -20

Исходный код на языке программирования Python

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]))

Пример(ы) выполнения программы на языке Python

[-20, 5, 8, -1, -19, -2, -14, 16, 4, 10, -9, 13, -11, 7, -6]
Максимальный по модулю 0-й элемент равен -20

Исходный код на языке программирования КуМир

алг максимальный уникальный
нач
  цел 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

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]

Пример(ы) выполнения программы на языке Basic

-17 15 -1 -4 16 12 -3 11 -9 -14 -6 0 -19 -8 10
Максимальный по модулю 12-й элемент равен -19

Тема

Массивы

Уровень сложности

Сложный

Дата публикации