Сортировка массива с условием

Если в целочисленной последовательности нет других чисел кроме x, y, z, то упорядочить последовательность по убыванию(невозрастанию).

Решение на C:

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
    int count;
    printf("Количество элементов в последовательности: ");
    scanf("%d", &count);
 
    int i, *input = malloc(count * sizeof(int)),
        x = -1, y = -1, z = -1;
 
    for (i = 0; i < count; i++) {
        printf("Введи %d элемент: ", i);
        scanf("%d", &input[i]);
 
        // свободны ли места для новых чисел
        if (x == -1) {
            x = input[i];
        } else if (y == -1) {
            y = input[i];
        } else if (z == -1) {
            z = input[i];
        }
 
        // если мест для новых чисел нет
        if (input[i] != x && input[i] != y && input[i] != z) {
            printf("В последовательности есть другие числа, кроме x, y, z");
            return 0;
        }
    }
 
    // сортируем
    int j;
    for (i = 0; i < count; i++) {
        for (j = 0; j < count - 1; j++) {
            if (input[j] < input[j+1]) {
                int tmp = input[j];
                input[j] = input[j+1];
                input[j+1] = tmp;
            }
        }
    }
 
    // выводим
    for (i = 0; i < count; i++) {
        printf("%d ", input[i]);
    }
    return 0;
}

Решение на Pascal:

var
    i, j, tmp, count, x, y, z: longint;
    {так как нет динамических массивов, примем максимальное значение за 1000}
    input: array [0..1000] of longint;
begin
    write('Количество элементов в последовательности: ');
    readln(count);
 
    x := -1;
    y := -1;
    z := -1;
 
    for i := 0 to count-1 do begin
        write('Введи ',i,' элемент: ');
        readln(input[i]);
 
        {свободны ли места для новых чисел}
        if (x = -1) then
            x := input[i]
        else if (y = -1) then
            y := input[i]
        else if (z = -1) then
            z := input[i];
 
        {если мест для новых чисел нет}
        if ((input[i] <> x) and (input[i] <> y) and (input[i] <> z)) then begin
            writeln('В последовательности есть другие числа, кроме x, y, z');
            exit;
        end;
    end;
 
    {сортируем}
    for i := 0 to count-1 do begin
        for j := 0 to count-2 do begin
            if (input[j] < input[j+1]) then begin
                tmp := input[j];
                input[j] := input[j+1];
                input[j+1] := tmp;
            end;
        end;
    end;
 
    // выводим
    for i := 0 to count-1 do
        write(input[i], ' ');
end.
Перейти к верхней панели