Сортировка массива с условием
1 минут
Если в целочисленной последовательности нет других чисел кроме 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;
input: array of longint;
begin
write('Количество элементов в последовательности: ');
readln(count);
setLength(input, 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.