Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами - C (СИ) (74427)
Формулировка задачи:
В одномерном массиве, состоящем из N целых элементов, вычислить:
1) Номер максимального элемента массива.
2) Произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
3) Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине – элементы стоявшие в четных позициях.
4) Найти длину самой длинной последовательности подряд идущих элементов массива, равных нулю.
Решение задачи: «Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n,k,m,f,q,q4;
printf("N=");
scanf("%d",&n);
int *arr = (int*) malloc(n * sizeof(float));
for(i=0; i< n; i++)
scanf("%d",&arr[i]);
// первая часть задачи
k = arr[0];
for(i=1; i< n; i++)
{
if (arr[i] > k)
{
k = arr[i];
}
}
printf("MAX: %d\n",k);
// вторая часть
m = 1;
for(i=0; i< n; i++)
{
if (arr[i] == 0 && i < n)
{
for(int j=i+1; j< n; j++)
{
if (arr[j] == 0)
{
break;
}
m = m*arr[j];
}
break;
}
}
printf("Otvet k 2 : %d\n",m);
// третья часть
int *arr2 = (int*) malloc(n * sizeof(float));
f = 1;
for(i=0; f < n ; i++)
{
arr2[i] = arr[f];
f = f + 2;
}
f = 0;
for(; i < n && f < n; i++)
{
arr2[i] = arr[f];
f = f+2;
}
printf("For the work 3\n");
for(i=0; i < n ; i++)
{
printf("%d\n",arr2[i]);
}
// четвертая часть
q4 = 0;
int j = 0;
for(i=0; i< n; i++)
{
q = 0;
if (arr[i] == 0 && i < n)
{
for(j=i+1; j< n && arr[j] != 0; j++)
{
q++;
}
}
i = j-1;
if (q4 < q)
{
q4 = q;
}
}
printf("Answer 4: %d\n",q4);
// удаляем динамические массивы
free(arr);
free(arr2);
}
Объяснение кода листинга программы
Код выполняет следующие действия:
- Ввод числа N, которое определяет размер массива.
- Выделение памяти под массив с использованием функции malloc.
- Ввод элементов массива с помощью функции scanf.
- Поиск максимального элемента в первой части массива с помощью цикла for и условного оператора if.
- Вывод найденного максимального элемента на экран с помощью функции printf.
- Поиск промежутка между первым и вторым нулевыми элементами массива. Если в массиве больше двух нулевых элементов, то поиск пропускается.
- Вычисление произведения элементов, расположенных между первым и вторым нулевыми элементами массива.
- Вывод результата на экран с помощью функции printf.
- Выделение памяти под второй массив с использованием функции malloc.
- Копирование элементов из первого массива во второй с использованием цикла for и условного оператора if.
- Вывод элементов второго массива на экран с помощью цикла for и функции printf.
- Поиск количества элементов, расположенных между первым и вторым нулевыми элементами в массиве (версия 4).
- Вывод результата на экран с помощью функции printf.
- Освобождение памяти, выделенной под массивы, с использованием функции free.