Постановка задачи. Задать размерность и значения элементов исходных векторов при объявлении или с помощью генератора случайных чисел (функция double Math.random() – возвращает

Задать размерность и значения элементов исходных векторов при объявлении или с помощью генератора случайных чисел (функция double Math.random() – возвращает случайное число в диапазоне 0...1). Вывести на экран исходный массив, и результат вычислений (в зависимости от поставленной задачи).

Дополнительно: ввод значений размерности массивов, а также значений элементов осуществляется пользователем с клавиатуры.


Варианты заданий

Вариант № 1 --------------------------------------------------------------------------------------------

1) Преобразовать заданный целочисленный массив S, уменьшив в два раза все

элементы кратные 2 (если таковые есть). Выдать сообщение о количестве

изменённых элементов.

2) Даны три последовательности чисел чисел A1,...,An; B1,...,Bn; C1,...,Cn;

Составить новую последовательность D1,...,Dn, каждый элемент которой

определяется по правилу: Di = MAX(Ai,Bi,Ci), i=1..9.

3) Найти номер первого нулевого элемента массива A1,...,An и произведение

элементов, расположенных до него, а среди элементов, расположенных правее

первого нулевого, найти максимальный элемент.

Вариант № 2 ----------------------------------------------------------------------------------------------

1) В массиве D1...Dn найти сумму элементов, расположенных на четных местах.

2) Найти номер первого нулевого элемента массива X1,...,Xn и сумму элементов,

предшествующих ему.

3) В данном массиве чисел C1,...,Cn поменять местами максимальный элемент с

последним отрицательным.

Вариант № 3) -----------------------------------------------------------------------------------------------

1) В массиве чисел C1,...,Cn найти произведение отрицательных чисел.

2) Даны три последовательности чисел A1,...,An; B1,...,Bn; C1,...,Cn.

Составить новую последовательность, в которой чередовались бы числа всех

трех последовательностей: D1=A1; D2=B1; D3=C1; D4=A2;... D(3n)=Cn

3) Из массива X1,...,Xn сформировать два массива: в один записать числа, располо-

женные до минимального элемента,во второй числа, расположенные после мини-

мального элемента.

Вариант № 4) ----------------------------------------------------------------------------------------------

1) В массиве А1,..., Аn найти количество элементов равных единице, стоящих на чётных местах.

2) Известно, что в массиве А1,А2,...,Аn количество отрицательных чисел равно

количству положительных. Составить новый массив так, чтобы чередовались

положительные и отрицательные числа.

3) В массиве A1, A2,..., An найти максимальный элемент и его местоположение в

массиве.

Вариант № 5) ----------------------------------------------------------------------------------------------

1) Дана последовательность А1,..., Аn. Заменить на нули все элементы,

расположенные между максимальным и минимальным элементом.

2) Найти сумму элементов последовательности B1, B2,..., Bn, расположенных

правее последнего отрицательного элемента, и номер этого элемента.

3) Составить новый массив, состоящий из пяти последних положительных элементов

последовательности Y1,Y2,...Yn домноженных на номер максимального элемента

данной последовательности.

Вариант № 6) ----------------------------------------------------------------------------------------------

1) В массиве А1,..., Аn найти минимум среди положительных и максимум среди отрица-

тельных элементов.

2) Дан массив целых чисел X1..Xn, в котором есть одна группа одинаковых элементов,

расположенных подряд. Подсчитать количество элементов в этой группе.

3) Составить новый массив, состоящий из элементов исходного вектора, значения которых

совпадают с их индексами.

Вариант № 7) ----------------------------------------------------------------------------------------------

1) В массиве С1, С2,..., Сn найти сумму чисел, больших единицы.

2) По вектору С (С1,..., Сn) получить вектор Х (Х1,..., Хn) по правилу:

Х1=С1; Х2=С3;...; Х(n/2)=С(n-1), Х(n/2+1)=Сn, Х(n/2+2)=С(n-2),..., Хn=С2.

Первая половина - нечетные, вторая - четные элементы исходного в обратном

порядке. Если размерность C - нечетная, то середина: C(trunc(n/2))

3) Дана последовательность чисел В1, В2,..., Вn. Найти сумму S1 элементов до

максимального элемента и сумму S2 элементов, расположенных правее него.

Вариант № 8) ----------------------------------------------------------------------------------------------

1) В массиве D1, D2,..., Dn найти количество чисел, меньших единицы.

2) Из данного массива чисел Х1, Х2,..., Хn исключить первое отрицательное

число. Оставшиеся числа переписать в массив Y1, Y2,..., Y(n-1).

3) В данном массиве чисел А1, А2,..., Аn поменять местами минимальный и

максимальный элементы.

Вариант № 9) ----------------------------------------------------------------------------------------------

1) В массиве С1, С2,..., Сn найти произведение чисел, больших 2.

2) Из данного массива чисел Х1,..., Хn исключить последнее положительное

число. Оставшиеся числа переписать в массив Z1,..., Z(n-1).

3) Найти сумму положительных элементов последовательности D1,..., Dn,

расположенных до первого нулевого элемента, заменить этой суммой

минимальный элемент массива.

Вариант № 10) ----------------------------------------------------------------------------------------------

1) В массиве А1,..., Аn найти сумму чисел, расположенных на местах, кратных 3.

2) Найти номер первого положительного элемента массива В1,...,Вn и сумму

элементов, расположенных правее него.

3) Из отрицательных элементов массива Х1, Х2,..., Хn, расположенных левее

минимального элемента, сформировать новый массив.


Приложение А. Сортировка массивов

· Сортировка выбором

Рассмотрим пример сортировки по возрастанию. То есть на начальной позиции в массиве должен стоять минимальный элемент, на следующей — больший или равный и т. д., на последнем месте должен стоять наибольший элемент.

Суть алгоритма такова. Во всём отыскиваем минимальный элемент, меняем его местами с начальным. Затем в оставшейся части массива (т. е. среди всех элементов кроме начального) снова отыскиваем минимальный элемент, меняем его местами уже со вторым элементом в массиве. И так далее.

Код:

for (int i = 0; i < a.length; i++) {
/* Предполагаем, что начальный элемент рассматриваемого
* фрагмента и будет минимальным.
*/
int min = a[i]; // Предполагаемый минимальный элемент
int imin = i; // Индекс минимального элемента
/* Просматриваем оставшийся фрагмент массива и ищем там
* элемент, меньший предположенного минимума.
*/
for (int j = i+1; j < a.length; j++) {
/* Если находим новый минимум, то запоминаем его индекс.
* И обновляем значение минимума.
*/
if (a[j] < min) {
min = a[j];
imin = j;
}
}
/* Проверяем, нашёлся ли элемент меньше, чем стоит на
* текущей позиции. Если нашёлся, то меняем элементы местами.
*/
if (i!= imin) {
int temp = a[i];
a[i] = a[imin];
a[imin] = temp;
}
}

· Сортировка методом пузырька

Суть алгоритма такова. Если пройдёмся по любому массиву установив правильный порядок в каждой паре соседних элементов, то после того прохода на последнем месте массива гарантированно будет стоять нужный элемент (самый большой для сортировки по возрастанию или самый маленький для сортировки по убыванию). Если ещё раз пройтись по массиву с такими же преобразованиями, то и на предпоследнем месте гарантированно окажется нужный элемент. И так далее.

Пример:

2 9 1 4 3 5 2 → порядок правильный, не будет перестановки

2 9 1 4 3 5 2 → 2 1 9 4 3 5 2

2 1 9 4 3 5 2 → 2 1 4 9 3 5 2

2 1 4 9 3 5 2 → 2 1 4 3 9 5 2

2 1 4 3 9 5 2 → 2 1 4 3 5 9 2

2 1 4 3 5 9 2 → 2 1 4 3 5 2 9

Код:

/* Внешний цикл постоянно сужает фрагмент массива,
* который будет рассматриваться, ведь после каждого прохода
* внутреннего цикла на последнем месте фрагмента будет
* оказываться нужный элемент (его не надо рассматривать снова).
*/
for (int i = a.length - 1; i >= 2; i--) {
/* В переменной sorted мы будем хранить признак того,
* отсортирован ли массив. Перед каждым проходом внутреннего
* цкла будем предполагать, что отсортирован, но если совершим
* хоть одну перестановку, то значит ещё не конца отсортирован.
* Этот приём, упрощающий сортировку, называется критерием Айверсона.
*/
boolean sorted = true;
/* Во внутреннем цикле мы проходимся по фрагменту массива, который
* определяется внешним циклом. В этом фрагменте мы устанавливаем
* правильный порядок между соседними элементами, так попарно
* обрабатывая весь фрагмент.
*/
for (int j = 0; j < i; j++) {
/* Если порядок соседних элементов не правильный, то их
* надо обменять местами. И запомнить, что была перестановка.
*/
if (a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
sorted = false;
}
}
/* Если массив отсортирован (т.е. не было ни одной перестановки
* во внутреннем цикле, значит можно прекращать работу внешнего
* цикла.
*/
if(sorted) {
break;
}
}

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: