В массиве действительных чисел а[i], i = 1,...,n. Вычислите сумму элементов массива, находящихся между первым и вторым положительным элементом.
Входные данные: n=5; a[i] = {5, -1, -18, 7, -8}
Выходные данные: sum = -19
C/C++
Решите пожалуйста на С++
1. Массив может не содержать положительных элементов.
2. В массиве может содержать только один положительный элемент.
3. Первый и второй положительные элементы могут быть расположены рядом.
4. Памяти под массив в системе может быть недостаточно.
Во всех вышеперечисленных случаях решение задачи невозможно.
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <random>
#include <numeric>
using namespace std;
int main() {
uniform_int_distribution<> uid(-99, 99);
mt19937 gen{ random_device()() };
auto rand = [&] { return uid(gen) / 10.0; };
cout << "n: ";
size_t n;
cin >> n;
auto box = new(nothrow) double[n];
if (box != nullptr) {
const auto end = box + n;
generate(box, end, rand);
cout.setf(ios::fixed);
cout.precision(1);
for (auto i = 0U; i < n; ++i) cout << setw(5) << box[i];
puts("");
auto is_pos = [](double x) { return x > 0.0; };
auto first = find_if(box, end, is_pos);
if (first == end) puts("Not found!");
else {
auto next = first + 1;
auto second = find_if(next, end, is_pos);
if (second == end) puts("Not found!");
else {
next = first + 1;
if (next == second) puts("Not found!");
else {
auto sum = accumulate(next, second, 0.0);
cout << "sum: " << sum << '\n';
}
}
}
delete[] box;
} else {
puts("Not enough memory!");
}
}
2. В массиве может содержать только один положительный элемент.
3. Первый и второй положительные элементы могут быть расположены рядом.
4. Памяти под массив в системе может быть недостаточно.
Во всех вышеперечисленных случаях решение задачи невозможно.
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <random>
#include <numeric>
using namespace std;
int main() {
uniform_int_distribution<> uid(-99, 99);
mt19937 gen{ random_device()() };
auto rand = [&] { return uid(gen) / 10.0; };
cout << "n: ";
size_t n;
cin >> n;
auto box = new(nothrow) double[n];
if (box != nullptr) {
const auto end = box + n;
generate(box, end, rand);
cout.setf(ios::fixed);
cout.precision(1);
for (auto i = 0U; i < n; ++i) cout << setw(5) << box[i];
puts("");
auto is_pos = [](double x) { return x > 0.0; };
auto first = find_if(box, end, is_pos);
if (first == end) puts("Not found!");
else {
auto next = first + 1;
auto second = find_if(next, end, is_pos);
if (second == end) puts("Not found!");
else {
next = first + 1;
if (next == second) puts("Not found!");
else {
auto sum = accumulate(next, second, 0.0);
cout << "sum: " << sum << '\n';
}
}
}
delete[] box;
} else {
puts("Not enough memory!");
}
}
#include "iostream"
using namespace std;
int main(){
int n; float s=0; bool b=false;
cout<<"n: "; cin>>n; float *a=new float[n];
for(int i=0;i< n;i++){cout<<"A["<< i+1<<"]: "; cin>>a[i];}
for(int i=0;i< n;i++){if(b&&a[i]>0)break; if(b)s+=a[i]; if(a[i]>0)b=true;}
cout<<"Sum="<< s<< endl; delete []a;}
using namespace std;
int main(){
int n; float s=0; bool b=false;
cout<<"n: "; cin>>n; float *a=new float[n];
for(int i=0;i< n;i++){cout<<"A["<< i+1<<"]: "; cin>>a[i];}
for(int i=0;i< n;i++){if(b&&a[i]>0)break; if(b)s+=a[i]; if(a[i]>0)b=true;}
cout<<"Sum="<< s<< endl; delete []a;}
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n, max;
cin >> n; //считываем длинну массива
int *mas = new int[n];
cout << "Zapolnyaem massiv: \n";
for (int i = 0; i < n; i++)
cin >> mas[i];
cout << "vhodnoi massiv: ";
for (int i = 0; i < n; i++)
cout << mas[i] << " ";
cout << endl;
//1
max = mas[0]; //это ты говорил что сделал,так что не комментирую)
for (int i = 1; i < n; i++)
if (abs(mas[i]) > abs(max))
max = mas[i];
cout << "Maximalnui po modyly: " << max << endl;
//2
int sum(0); //сумму инициализируем 0
for (int i = 0; i < n; i++)
{
if (mas[i] > 0) //как только встретим первый положытельный елемент
{
i++;
while (mas[i] <= 0 && i < n) //то будем сумировать все елементы в переменную сум пока не встретим следующий
{ //положытельный елемент или пока не закончиться массив
sum += mas[i];
i++;
}
break; //все посчитали,выходим из цыкла фор
}
}
cout << "Summa: " << sum << endl;
//3
int j = 0; //переменная для подсчета количества 0
for (int i = 0; i < n; i++)
{
if (mas[i] == 0) //когда встречаем 0
{
j++; //увеличиваем счетчик на 1
for (int k = i; k < n-1; k++) //будем сдвигать все елементы что после нуля на 1 позицыю
mas[k] = mas[k + 1];
i--; //также минусуем и, чтобы проверить после сдвига, вдруг
} //после сдвига на место 0 стал другой 0, что был за ним
}
while (j != 0) //дальше просто цыклом сзади в массив записываем 0(их количество посчитали же)
{
mas[n - j] = 0;
j--;
}
cout << "vhodnoi massiv: ";
for (int i = 0; i < n; i++)
cout << mas[i] << " ";
cout << endl;
return 0;
#include <cmath>
using namespace std;
int main()
{
int n, max;
cin >> n; //считываем длинну массива
int *mas = new int[n];
cout << "Zapolnyaem massiv: \n";
for (int i = 0; i < n; i++)
cin >> mas[i];
cout << "vhodnoi massiv: ";
for (int i = 0; i < n; i++)
cout << mas[i] << " ";
cout << endl;
//1
max = mas[0]; //это ты говорил что сделал,так что не комментирую)
for (int i = 1; i < n; i++)
if (abs(mas[i]) > abs(max))
max = mas[i];
cout << "Maximalnui po modyly: " << max << endl;
//2
int sum(0); //сумму инициализируем 0
for (int i = 0; i < n; i++)
{
if (mas[i] > 0) //как только встретим первый положытельный елемент
{
i++;
while (mas[i] <= 0 && i < n) //то будем сумировать все елементы в переменную сум пока не встретим следующий
{ //положытельный елемент или пока не закончиться массив
sum += mas[i];
i++;
}
break; //все посчитали,выходим из цыкла фор
}
}
cout << "Summa: " << sum << endl;
//3
int j = 0; //переменная для подсчета количества 0
for (int i = 0; i < n; i++)
{
if (mas[i] == 0) //когда встречаем 0
{
j++; //увеличиваем счетчик на 1
for (int k = i; k < n-1; k++) //будем сдвигать все елементы что после нуля на 1 позицыю
mas[k] = mas[k + 1];
i--; //также минусуем и, чтобы проверить после сдвига, вдруг
} //после сдвига на место 0 стал другой 0, что был за ним
}
while (j != 0) //дальше просто цыклом сзади в массив записываем 0(их количество посчитали же)
{
mas[n - j] = 0;
j--;
}
cout << "vhodnoi massiv: ";
for (int i = 0; i < n; i++)
cout << mas[i] << " ";
cout << endl;
return 0;
Похожие вопросы
- Решите пожалуйста !!! Дана действительная матрица размером n x m.
- Решите, пожалуйста, не успеваю.
- Помогите решить, пожалуйста
- Решите, пожалуйста, задачу на c++
- Решите пожалуйста задачу на языке Си!!!
- Программирование C++.Помогите решить пожалуйста
- Решите пожалуйста на С++. Буду очень благодарен за помощь.
- С++! Программирование. Помогите решить, пожалуйста.
- Помогите решить задачу пожалуйста, в C++
- Помогите пожалуйста решить задачу на языке С#.