Предмет: Информатика,
автор: AlSat
Дан одномерный числовой массив. Заменить каждый член на произведение предыдущих чётных членов.
Ответы
Автор ответа:
0
#include <ctime>
#include <algorithm>
#include <vector>
int main()
{
// Заполняем.
const int n = 1000;
std::srand(time(0));
std::vector<unsigned int> arr(n);
std::generate(arr.begin(), arr.end(), std::rand);
// Находим первые два четных элемента.
auto lambda = [](const unsigned int & i){ return (i % 2) == 0; };
auto iEven1 = std::find_if(arr.begin(), arr.end(), lambda);
auto iEven2 = std::find_if(iEven1 + 1 , arr.end(), lambda);
unsigned int nEven1 = *iEven1;
unsigned int nEven2 = *iEven2;
// Изменяем.
bool isTurn = false;
std::transform(iEven2 + 1, arr.end(), iEven2 + 1,
[&isTurn, &nEven1, &nEven2](unsigned int i){
unsigned int t = i;
i = nEven1 * nEven2;
if (t % 2) return i;
isTurn = !isTurn;
if (isTurn) nEven1 = t;
else nEven2 = t;
return i;
});
return 0;
}
#include <algorithm>
#include <vector>
int main()
{
// Заполняем.
const int n = 1000;
std::srand(time(0));
std::vector<unsigned int> arr(n);
std::generate(arr.begin(), arr.end(), std::rand);
// Находим первые два четных элемента.
auto lambda = [](const unsigned int & i){ return (i % 2) == 0; };
auto iEven1 = std::find_if(arr.begin(), arr.end(), lambda);
auto iEven2 = std::find_if(iEven1 + 1 , arr.end(), lambda);
unsigned int nEven1 = *iEven1;
unsigned int nEven2 = *iEven2;
// Изменяем.
bool isTurn = false;
std::transform(iEven2 + 1, arr.end(), iEven2 + 1,
[&isTurn, &nEven1, &nEven2](unsigned int i){
unsigned int t = i;
i = nEven1 * nEven2;
if (t % 2) return i;
isTurn = !isTurn;
if (isTurn) nEven1 = t;
else nEven2 = t;
return i;
});
return 0;
}
Автор ответа:
0
Огромное спасибо :)
Автор ответа:
0
Мне только для Лазаруса нужно, но попробую с этим разобраться ;)
Автор ответа:
0
Тогда так тебе проще будет разобраться и перевести в паскаль..
#include <ctime>
#include <algorithm>
int main()
{
// Заполняем.
const int n = 1000;
std::srand(time(0));
int arr[n];
// Заполняем случайными числами.
for (int i = 0; i < n; ++i){
arr[i] = std::rand();
}
#include <ctime>
#include <algorithm>
int main()
{
// Заполняем.
const int n = 1000;
std::srand(time(0));
int arr[n];
// Заполняем случайными числами.
for (int i = 0; i < n; ++i){
arr[i] = std::rand();
}
Автор ответа:
0
// Находим первые два четных элемента.
int iEven1;
for (int i = 0; i < n; ++i){
if (arr[i] % 2 == 0) {
iEven1 = i;
break;
}
}
int iEven2; // Номер четного элемента.
for (int i = iEven1+1; i < n; ++i){
if (arr[i] % 2 == 0) {
iEven2 = i;
break;
}
}
int iEven1;
for (int i = 0; i < n; ++i){
if (arr[i] % 2 == 0) {
iEven1 = i;
break;
}
}
int iEven2; // Номер четного элемента.
for (int i = iEven1+1; i < n; ++i){
if (arr[i] % 2 == 0) {
iEven2 = i;
break;
}
}
Автор ответа:
0
// Изменяем.
bool isTurn = false;
int nEven1 = arr[iEven1]; // Значение четного элемента.
int nEven2 = arr[iEven2];
for (int i = iEven2 +1; i < n; ++i){
int t = arr[i];
arr[i] = nEven1 * nEven2;
// Если число не четное, не запоминаем его. Цикл сначала.
if (t % 2 != 0) continue;
// Очередность.
isTurn = !isTurn;
if (isTurn) nEven1 = t;
else nEven2 = t;
}
bool isTurn = false;
int nEven1 = arr[iEven1]; // Значение четного элемента.
int nEven2 = arr[iEven2];
for (int i = iEven2 +1; i < n; ++i){
int t = arr[i];
arr[i] = nEven1 * nEven2;
// Если число не четное, не запоминаем его. Цикл сначала.
if (t % 2 != 0) continue;
// Очередность.
isTurn = !isTurn;
if (isTurn) nEven1 = t;
else nEven2 = t;
}
Похожие вопросы
Предмет: Алгебра,
автор: lgajguk311
Предмет: Қазақ тiлi,
автор: Аноним
Предмет: Биология,
автор: Аноним
Предмет: Химия,
автор: Катя296
Предмет: Математика,
автор: Гирмадина