task20

mail@pastecode.io avatar
unknown
c_cpp
7 months ago
2.0 kB
2
Indexable
Never
#include <iostream>
#include <locale.h>

/* 20. Дан целочисленный массив размерности n. Определить является ли
последовательность элементов, находящаяся между первым нечетным элементом
массива и последним нечетным элементом массива, арифметической прогрессией.
Выдать сообщение, если в массиве нет такой последовательности. */


bool checkArithmeticProg(int* a, int begin, int end) {
	int d = a[begin + 2] - a[begin + 1];
	for (int i = begin + 1; i < end - 1; i++) {
		if (a[i + 1] - a[i] != d)
			return false;
	}
	return true;
}

void firstAndLastOddNumber(int* a, int n, int &l, int &r) {
	l = 0;
	r = n - 1;
	for (int i = 0; i < n; i++) {
		if (a[i] % 2 == 1) {
			l = i;
			break;
		}
	}
	for (int i = n-1; i > l; i--) {
		if(a[i] % 2 == 1){
			r = i;
			return;
		}
	}
}

int main() {
	setlocale(LC_ALL, "");
	int n;
	printf("Введите количество элементов n: ");
	scanf_s("%d", &n);
	int* arr = new int[n];
	printf("Введите элементы массива:");
	for (int i = 0; i < n; i++) 
		scanf_s("%d", &arr[i]);
	int left, right;
	firstAndLastOddNumber(arr, n, left, right);
	if (right - left < 2)
		printf("Последовательности нет.\n");
	else {
		if (checkArithmeticProg(arr, left, right))
			printf("Последовательность между первым и последним нечётными элементами массива является арифметической прогрессией.\n");
		else
			printf("Последовательность между первым и последним нечётными элементами массива НЕ является арифметической прогрессией.\n");
	}
	return 0;
}
Leave a Comment