В одномерном массиве, состоящем из n целых элементов, вычислить:
А) количество пар x[i] и x[i + 1], таких, что x[i] > x[i + 1];
Б) сумму элементов массива, расположенных после минимального
элемента массива;
В) произведение элементов массива, расположенных до первого элемента массива, кратного 5.
C/C++
Как обработать этот массив на языке Си?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int n;
do
{
printf("Введите размер массива: ");
scanf("%d",&n);
} while(n < 2);
srand(time(NULL)); /* данные будут сгенерированы автоматически */
rand();
int * A;
A = (int*) malloc(n * sizeof(int));
for(int x = 0; x < n; x++)
{
A[x] = rand() % 21 - 10; /* диапазон [-10;10] */
printf("%d ", A[x]); /* выводим на экран */
}
printf("\n\n");
/* А */
int count = 0;
for(int x = 0; x < n - 1; x++)
{
if(A[x] > A[x+1]) count++;
}
printf("Количество пар по пункту А равно %d.\n",count);
/* Б */
/* будем искать последний минимальный элемент
* на тот случай, если их несколько
*/
int i_min = 0, sum = 0; /* индекс минимального элемента и сумма */
for(int x = 1; x < n; x++)
{
if(A[i_min] >= A[x]) i_min = x;
}
for(int z = i_min + 1; z < n; z++)
{
sum += A[z];
}
printf("Сумма элементов массива после последнего минимального равна %d.\n",sum);
/* В */
int p = 1;
int i = 0;
for(int x = 0; x < n; x++)
{
if(A[x] % 5 == 0) break;
else p *= A[x];
i = x;
}
if(i) printf("Произведение по пункту В равно %d.\n",p);
else printf("Таких элементов нет. \n");
if(A != (int*) NULL)
{
free(A);
A = (int*) NULL;
}
return 0;
}
#include <stdlib.h>
#include <time.h>
int main()
{
int n;
do
{
printf("Введите размер массива: ");
scanf("%d",&n);
} while(n < 2);
srand(time(NULL)); /* данные будут сгенерированы автоматически */
rand();
int * A;
A = (int*) malloc(n * sizeof(int));
for(int x = 0; x < n; x++)
{
A[x] = rand() % 21 - 10; /* диапазон [-10;10] */
printf("%d ", A[x]); /* выводим на экран */
}
printf("\n\n");
/* А */
int count = 0;
for(int x = 0; x < n - 1; x++)
{
if(A[x] > A[x+1]) count++;
}
printf("Количество пар по пункту А равно %d.\n",count);
/* Б */
/* будем искать последний минимальный элемент
* на тот случай, если их несколько
*/
int i_min = 0, sum = 0; /* индекс минимального элемента и сумма */
for(int x = 1; x < n; x++)
{
if(A[i_min] >= A[x]) i_min = x;
}
for(int z = i_min + 1; z < n; z++)
{
sum += A[z];
}
printf("Сумма элементов массива после последнего минимального равна %d.\n",sum);
/* В */
int p = 1;
int i = 0;
for(int x = 0; x < n; x++)
{
if(A[x] % 5 == 0) break;
else p *= A[x];
i = x;
}
if(i) printf("Произведение по пункту В равно %d.\n",p);
else printf("Таких элементов нет. \n");
if(A != (int*) NULL)
{
free(A);
A = (int*) NULL;
}
return 0;
}
#include < iostream >
using namespace std;
int min(int* arr, int N) {
int min = 2147483647;
for (int i = 0; i < N; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}
int main()
{
setlocale(LC_ALL, "rus");
const int N = 10;
int arr[N];
for (int i = 0; i < N; i++) {
arr[i] = rand() % 68 +1;
}
int countOfMorePrevious = 0;
int sumAfterMin = 0;
int mult = 1;
cout << "Массив: ";
for (int i = 0; i < N; i++) {
if (arr[i] > arr[i + 1]) {
countOfMorePrevious++;
}
cout << arr[i] << " ";
}
for (int i = 0; i < N; i++) {
if (arr[i] == min(arr, N)) {
for (i; i < N - 1; i++) {
sumAfterMin += arr[i + 1];
}
}
}
for (int i = 0; i < N; i++) {
if (arr[i] % 5 != 0) {
mult *= arr[i];
}
else {
break;
}
}
cout << endl;
cout << "Количество пар x[i] и x[i + 1], таких, что x[i] > x[i + 1]: " << countOfMorePrevious << endl;
cout << "Сумма элементов массива, расположенных после минимального элемента массива: " << sumAfterMin << endl;
cout << "Произведение элементов массива, расположенных до первого элемента массива, кратного 5: " << mult << endl;
}
using namespace std;
int min(int* arr, int N) {
int min = 2147483647;
for (int i = 0; i < N; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}
int main()
{
setlocale(LC_ALL, "rus");
const int N = 10;
int arr[N];
for (int i = 0; i < N; i++) {
arr[i] = rand() % 68 +1;
}
int countOfMorePrevious = 0;
int sumAfterMin = 0;
int mult = 1;
cout << "Массив: ";
for (int i = 0; i < N; i++) {
if (arr[i] > arr[i + 1]) {
countOfMorePrevious++;
}
cout << arr[i] << " ";
}
for (int i = 0; i < N; i++) {
if (arr[i] == min(arr, N)) {
for (i; i < N - 1; i++) {
sumAfterMin += arr[i + 1];
}
}
}
for (int i = 0; i < N; i++) {
if (arr[i] % 5 != 0) {
mult *= arr[i];
}
else {
break;
}
}
cout << endl;
cout << "Количество пар x[i] и x[i + 1], таких, что x[i] > x[i + 1]: " << countOfMorePrevious << endl;
cout << "Сумма элементов массива, расположенных после минимального элемента массива: " << sumAfterMin << endl;
cout << "Произведение элементов массива, расположенных до первого элемента массива, кратного 5: " << mult << endl;
}
Похожие вопросы
- Одномерные массивы на языке си
- Массивы в языке Си
- Упорядочить элементы массива по возрастанию на языке Си
- Помогите добавить ввод чисел в массив матрицы на языке Си
- Как ввести строчный массив через scanf_s в языке Си
- Язык Си. Сортировка и поиск элементв массива
- Язык Си. Сортировка и поиск элементов массива
- Помогите исправить и дописать программу с массивами на языке C++. Буду благодарен, т. к. самому уже не понятно.
- Динамический массив и указатель Си
- Как отсортировать массив дат в СИ
2. Как будет работать Ваша программа, если минимальный элемент будет последним элементом массива?
3. Какой массив используется в Вашей программе – статический или динамический?