/*
Даны натуральные числа n,p,q,a1,a2,...,an, причем n>=q>p>=1.
найти количество членов последовательности a1,a2,...,aq удовлетворяющих условию pow(3,i+1)<ai<(i-1)!, где i=1,2,...,q. Определить сумму четных
членов последовательности ap,ap+1,....,an имеющих нечетные индексы. Упорядочить члены последовательности ap,ap+1,...,aq по возрастанию
используя алгоритм сортировки методом вставки.
*/
/*
codeby.net
Autor: DarkKnight125
*/
#include <iostream>
#include <time.h>
using namespace std;
void main (void)
{
unsigned int n, p, q; //Наши натуральные коэффициенты
unsigned int* Arr; //Массив
setlocale(LC_ALL,"Russian"); //Установим локаль в кодовую страницу .1251
srand(time(NULL)); //Инициализируем генератор случайно величины
cout<<"Введите размерность массива n = ";
cin>>n; //Введем нашу n
Arr = new unsigned int[n]; //Выделим память под массив, (unsigned int) использую т.к. числа натуральные и не могут быть отрицательны
//Заполним рандомно массив и выведем его на экран
cout<<endl<<"Значение массива A = ";
for (int i=0; i<n; i++)
{
Arr[i] = rand()%999+1; //Сгенерируем значение i-ого элемента от 1..999
cout<<Arr[i]<<" "; //Выведим его на экран
}
cout<<endl;
cout<<"Введите натуральное q (<=n) = ";
cin>>q; //Введем q
if (q>n) { //Проверим условие
cout<<"Не верный ввод q";
return;
}
cout<<"Введите натуральное p (>=1 И <"<<q<<") = ";
cin>>p;//Введем p
if (p>=q){ //Проверим и его условие
cout<<"Не верный ввод p";
return;
}
//Нахождение кол-ва членов до q, которые соответствуют условиям
int Count = 0; //Счетчик
for (int i=0; i<q;i++) //Обойдем массив до q
if (pow((double)3,(double)i+1+1)<Arr[i] && !(Arr[i]<(i+1-1))) //Проверим наше условие +1 - встречается потому что в C/С++ индексы массива начинаются с
//нуля (0), а по задачи у нас они идут 1..n
Count++; //Увеличиваем счетчик если условие выполняется
cout<<endl<<"Кол-во членов послед. a1,...,aq удовлетворяющих условию pow(3,i+1)<ai<(i-1)! : "<<endl;
cout<<"Count = "<<Count<<endl<<endl;
//Определить сумму четных членов последовательности ap,ap+1,....,an имеющих нечетные индексы.
int Sum = 0; //Обнулим первоначально сумму
for (int i = p-1; i< n; i++) //Обойдем массив от p-ого элемента до n
if (Arr[i]%2==0 && (i+1)%2==1) Sum+=Arr[i]; //Проверяем четность значения и нечетность индекса если выполняется условие увеличиваем сумму
cout<<"Сумма четных членов последовательности ap,..,an имеющих нечетные индексы :"<<endl
<<"Sum = "<<Sum<<endl;
///Упорядочить члены последовательности ap,ap+1,...,aq по возрастанию используя алгоритм сортировки методом вставки. /
for (int i=p+1; i<q; i++) // алгоритм сортировки Методом Вставки
{
unsigned int Value = Arr[i];
int j = i-1;
while (j>=0 && Arr[j] > Value)
{
Arr[j+1] = Arr[j];
j = j-1;
}
Arr[j+1] = Value;
}
cout<<endl<<"Отсортированные элементы :"<<endl;
for (int i=p; i<q; i++) //Выведим отсортированные элементы
{
cout<<Arr[i]<<" ";
}
}