Форум программистов, компьютерный форум CyberForum.ru

Получить сумму тех чисел данной последовательности, которые кратны 5 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
Маша Болдина
2 / 2 / 0
Регистрация: 15.02.2012
Сообщений: 56
04.03.2012, 10:34     Получить сумму тех чисел данной последовательности, которые кратны 5 #1
'Даны целые числа A1, ..., A50. Получить сумму тех чисел данной последовательности, которые
а) кратны 5;
б) нечетны и отрицательны;
в) удовлетворяют условию |Ai|<i^2.
Буду очень благодарна.Решите на С++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2012, 10:34     Получить сумму тех чисел данной последовательности, которые кратны 5
Посмотрите здесь:

Получить сумму тех чисел последовательности, которые нечётны и отрицательны C++
Получить сумму тех членов последовательности, которые нечетны и отрицательны C++
Одномерные массивы (Найти сумму тех элементов, которые кратны данному К) C++
C++ Получить сумму тех чисел данной последовательности, которые кратны 5
C++ Найти сумму индексов тех элементов массива, которые кратны трем
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
miriganua
129 / 100 / 4
Регистрация: 05.02.2012
Сообщений: 241
04.03.2012, 11:50     Получить сумму тех чисел данной последовательности, которые кратны 5 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    const int size = 50;
    int a[size] = {10, -3, 9, -25, 95, -66, 80, -32, 1, -19,
                   -59, 43, 0, 14, -56, 14, 8, -57, 6, 2,
                   30, -40, 78, 10, 24, -65, 81, 35, 69, 4,
                   0, 58, -41, 90, -54, 32, 27, 65, -85, 7,
                   98, 65, 91, 36, 7, 0, 12, -17, -47, 68};
    int sum = 0;
    for (int i = 0; i < size; i++)
    {
        if (a[i] % 5 == 0 && a[i] < 0 && a[i] % 2 != 0 && abs(a[i]) < (i + 1) * (i + 1))
        {
            sum += a[i];
        }
    }
    cout << "Sum:" << sum << '\n';
    return 0;
}
Вроде работает правильно, хотя я не уверен что правильно понял задание, так что проверь.
Маша Болдина
2 / 2 / 0
Регистрация: 15.02.2012
Сообщений: 56
04.03.2012, 22:44  [ТС]     Получить сумму тех чисел данной последовательности, которые кратны 5 #3
Извините, но программа не работает..можете еще раз пересмотреть)спасибо.
miriganua
129 / 100 / 4
Регистрация: 05.02.2012
Сообщений: 241
05.03.2012, 01:44     Получить сумму тех чисел данной последовательности, которые кратны 5 #4
Странно, у меня работает в Visual Studio 2010. А какие пишет ошибки?

Добавлено через 4 минуты
Или неправильно считает. Может я неправильно понял задание. У меня он считает элементы для которых все три условия верны. Может нужно найти сумму элементов согласно условию а) потом отдельную сумму согласно условию б) и т.д.
Маша Болдина
2 / 2 / 0
Регистрация: 15.02.2012
Сообщений: 56
05.03.2012, 05:10  [ТС]     Получить сумму тех чисел данной последовательности, которые кратны 5 #5
да да именно так)по отдельности каждое условие...пожалуйста попробуйте еще раз.
Тинг
 Аватар для Тинг
6 / 6 / 1
Регистрация: 04.03.2012
Сообщений: 11
05.03.2012, 10:14     Получить сумму тех чисел данной последовательности, которые кратны 5 #6
Цитата Сообщение от Игорь Миронюк Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    const int size = 50;
    int a[size] = {10, -3, 9, -25, 95, -66, 80, -32, 1, -19,
                   -59, 43, 0, 14, -56, 14, 8, -57, 6, 2,
                   30, -40, 78, 10, 24, -65, 81, 35, 69, 4,
                   0, 58, -41, 90, -54, 32, 27, 65, -85, 7,
                   98, 65, 91, 36, 7, 0, 12, -17, -47, 68};
    int sum = 0;
    for (int i = 0; i < size; i++)
    {
        if (a[i] % 5 == 0 && a[i] < 0 && a[i] % 2 != 0 && abs(a[i]) < (i + 1) * (i + 1))
        {
            sum += a[i];
        }
    }
    cout << "Sum:" << sum << '\n';
    return 0;
}
Вроде работает правильно, хотя я не уверен что правильно понял задание, так что проверь.
C++
1
                if (a[i] % 5 == 0 && a[i] < 0 && a[i] % 2 != 0 && abs(a[i]) < (i * i))//abs(a[i]) < (i * i) - имеется в виду модуль a[i] меньше i в степени 2
Добавлено через 3 минуты
Цитата Сообщение от Маша Болдина Посмотреть сообщение
'Даны целые числа A1, ..., A50. Получить сумму тех чисел данной последовательности, которые
а) кратны 5;
б) нечетны и отрицательны;
в) удовлетворяют условию |Ai|<i^2.
Буду очень благодарна.Решите на С++
В массиве уже должны быть числа или же лучше, чтобы можно было ввести пользователю?

Добавлено через 8 минут
Цитата Сообщение от Маша Болдина Посмотреть сообщение
да да именно так)по отдельности каждое условие...пожалуйста попробуйте еще раз.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <math.h>
 
using namespace std;
 
int main()
{
        const int size = 50;
        int a[size] = {10, -3, 9, -25, 95, -66, 80, -32, 1, -19,
                       -59, 43, 0, 14, -56, 14, 8, -57, 6, 2,
                       30, -40, 78, 10, 24, -65, 81, 35, 69, 4,
                       0, 58, -41, 90, -54, 32, 27, 65, -85, 7,
                       98, 65, 91, 36, 7, 0, 12, -17, -47, 68};
        int sumKr = 0,
            sumNech = 0,
            sumUsl = 0;
 
        for (int i = 0; i < size; i++)
        {
                if (a[i] % 5 == 0) 
                    sumKr += a[i];
                    
                if (a[i] < 0 && a[i] % 2 != 0)
                    sumNech += a[i];
                    
                if (abs(a[i]) < (i * i))
                    sumUsl += a[i];
        }
 
        cout << "Summa kratnih 5: " << sumKr << endl;
        cout << "Summa nechetnih i otricatel'nih: " << sumNech << endl;
        cout << "Summa udovletvorajushih uslovie |a[i]| < i^2: " << sumUsl << endl;
 
    system ("pause");
    return 0;
}
Это по решению, которое предложил Игорь Миронюк.

Добавлено через 14 минут
Для ввода в массив случайных чисел от -100 до 100(по желанию можешь изменить):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <time.h>
 
using namespace std;
 
int main()
{
        const int size = 50;
        int a[size] ;
        srand(time(NULL));
        for (int i = 0; i < size; i++)
        {
            a[i] = -100+rand()%100;
        }
 
        int sumKr = 0,
            sumNech = 0,
            sumUsl = 0;
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.03.2012, 14:29     Получить сумму тех чисел данной последовательности, которые кратны 5 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <algorithm>
#include <iterator>
#include <numeric>
#include <random>
#include <ctime>
 
int main()
{
   const size_t min = -1000, max = 1000, array_size = 50;
   std::mt19937 generator(time(0));
   std::uniform_int_distribution<> distr(min, max);
   std::vector<int> vec(array_size);
   std::generate(vec.begin(), vec.end(), [&generator, &distr]()
   {
      return distr(generator);
   });
   std::cout << "Array" << std::endl;
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
   std::cout << "Sum of numbers modulus to 5: " << std::accumulate(vec.begin(), vec.end(), 0, [](const int first, const int second)
   {
      return !(second % 5) ? first + second : first;
   }) << std::endl;
   std::cout << "Sum of negative odd numbers: " << std::accumulate(vec.begin(), vec.end(), 0, [](const int first, const int second)
   {
      return second < 0 && (second % 2) ? first + second : first;
   }) << std::endl;
   size_t index = 1;
   std::cout << "Sum of numbers lesser than index ^ 2: " << std::accumulate(vec.begin(), vec.end(), 0, 
         [&index](const int first, const int second) -> int
   {
      int t_idx = index;
      ++index;
      return ((second < (t_idx * t_idx)) ? first + second : first);
   }) << std::endl;
}
http://liveworkspace.org/code/482806...83d0a38056b0e9
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
05.03.2012, 15:10     Получить сумму тех чисел данной последовательности, которые кратны 5 #8
Цитата Сообщение от Тинг Посмотреть сообщение
Для ввода в массив случайных чисел от -100 до 100
Цитата Сообщение от Тинг Посмотреть сообщение
a[i] = -100+rand()%100;
Это от минус ста до минус одного получится.
C++
1
a[i] = -100 + rand() % 201;
Тинг
 Аватар для Тинг
6 / 6 / 1
Регистрация: 04.03.2012
Сообщений: 11
05.03.2012, 15:15     Получить сумму тех чисел данной последовательности, которые кратны 5 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <algorithm>
#include <iterator>
#include <numeric>
#include <random>
#include <ctime>
 
int main()
{
   const size_t min = -1000, max = 1000, array_size = 50;
   std::mt19937 generator(time(0));
   std::uniform_int_distribution<> distr(min, max);
   std::vector<int> vec(array_size);
   std::generate(vec.begin(), vec.end(), [&generator, &distr]()
   {
      return distr(generator);
   });
   std::cout << "Array" << std::endl;
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
   std::cout << "Sum of numbers modulus to 5: " << std::accumulate(vec.begin(), vec.end(), 0, [](const int first, const int second)
   {
      return !(second % 5) ? first + second : first;
   }) << std::endl;
   std::cout << "Sum of negative odd numbers: " << std::accumulate(vec.begin(), vec.end(), 0, [](const int first, const int second)
   {
      return second < 0 && (second % 2) ? first + second : first;
   }) << std::endl;
   size_t index = 1;
   std::cout << "Sum of numbers lesser than index ^ 2: " << std::accumulate(vec.begin(), vec.end(), 0, 
         [&index](const int first, const int second) -> int
   {
      int t_idx = index;
      ++index;
      return ((second < (t_idx * t_idx)) ? first + second : first);
   }) << std::endl;
}
http://liveworkspace.org/code/482806...83d0a38056b0e9
А если так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <math.h>
#include <time.h>
#include <iomanip>
 
using namespace std;
 
int main()
{
        const int size = 50;
        int a[size] ;
        srand(time(NULL));
        cout << "Array: " << endl;
 
        for (int i = 0; i < size; i++)
         {
             a[i] = rand() % 2000 - 1000;
             cout << setw(10) << "a["<<i<<"]: " << a[i] ;
 
             if ( (i+1) % 2 == 0)
                 cout << endl;
         }
 
        int sumKr = 0,
            sumNech = 0,
            sumUsl = 0;
 
        for (int i = 0; i < size; i++)
        {
                if (a[i] % 5 == 0) 
                                        sumKr += a[i];
                                        
                                if (a[i] < 0 && a[i] % 2 != 0)
                                        sumNech += a[i];
                                        
                                if (abs(a[i]) < (i * i))
                                        sumUsl += a[i];
        }
 
        cout << endl <<"Summa kratnih 5: " << sumKr << endl;
        cout << "Summa nechetnih i otricatel'nih: " << sumNech << endl;
        cout << "Summa udovletvorajushih uslovie |a[i]| < i^2: " << sumUsl << endl;
 
        system ("pause");
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от easybudda Посмотреть сообщение
Это от минус ста до минус одного получится.
C++
1
a[i] = -100 + rand() % 201;
Спасибо.. "Очепятка" )
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.03.2012, 15:22     Получить сумму тех чисел данной последовательности, которые кратны 5 #10
Тинг, А если так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
#include <iterator>
#include <random>
#include <ctime>
 
int main()
{
   const size_t min = -1000, max = 1000, array_size = 50;
   std::mt19937 generator(time(0));
   std::uniform_int_distribution<> distr(min, max);
   std::vector<int> vec(array_size);
   std::generate(vec.begin(), vec.end(), [&generator, &distr]()
   {
      return distr(generator);
   });
   std::cout << "Array" << std::endl;
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
   int sum_mod = 0, sum_neg_odd = 0, sum_less_sq = 0;
   size_t index = 1;
   std::for_each(vec.begin(), vec.end(), [&index, &sum_mod, &sum_neg_odd, &sum_less_sq](const int value)
   {
      sum_mod += !(value % 5) ? value : 0;
      sum_neg_odd += value < 0 && (value % 2) ? value : 0;
      sum_less_sq += value < index * index ? value : 0;
      ++index;
   });
   std::cout << "sum mod to 5: " << sum_mod << " sum neg and odd: " << sum_neg_odd << " sum less than square: " << sum_less_sq 
      << std::endl;
}
Но мне в любом случае больше нравится мой первый вариант. Блоки задания логически разделены. Пусть лишние проходы по коллекции, я здесь не гонюсь за скоростью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2012, 15:32     Получить сумму тех чисел данной последовательности, которые кратны 5
Еще ссылки по теме:

C++ В массив B[n] занесены натуральные числа. Найти сумму тех элементов, которые кратны данному f
C++ В массив A[N] занесены натуральные числа.Найти сумму тех элементов, которые кратны данному K.
Определить сумму тех целых чисел, которые кратны числу n C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Тинг
 Аватар для Тинг
6 / 6 / 1
Регистрация: 04.03.2012
Сообщений: 11
05.03.2012, 15:32     Получить сумму тех чисел данной последовательности, которые кратны 5 #11
Цитата Сообщение от ForEveR Посмотреть сообщение
Тинг, А если так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <algorithm>
#include <iterator>
#include <random>
#include <ctime>
 
int main()
{
   const size_t min = -1000, max = 1000, array_size = 50;
   std::mt19937 generator(time(0));
   std::uniform_int_distribution<> distr(min, max);
   std::vector<int> vec(array_size);
   std::generate(vec.begin(), vec.end(), [&generator, &distr]()
   {
      return distr(generator);
   });
   std::cout << "Array" << std::endl;
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
   int sum_mod = 0, sum_neg_odd = 0, sum_less_sq = 0;
   size_t index = 1;
   std::for_each(vec.begin(), vec.end(), [&index, &sum_mod, &sum_neg_odd, &sum_less_sq](const int value)
   {
      sum_mod += !(value % 5) ? value : 0;
      sum_neg_odd += value < 0 && (value % 2) ? value : 0;
      sum_less_sq += value < index * index ? value : 0;
      ++index;
   });
   std::cout << "sum mod to 5: " << sum_mod << " sum neg and odd: " << sum_neg_odd << " sum less than square: " << sum_less_sq 
      << std::endl;
}
Но мне в любом случае больше нравится мой первый вариант. Блоки задания логически разделены. Пусть лишние проходы по коллекции, я здесь не гонюсь за скоростью.
Мне просто кажется, если новичок покажет ваш код на лабораторной, то у него могут возникнуть проблемы с его разъяснением)) Хотя, это не мне решать конечно..
Yandex
Объявления
05.03.2012, 15:32     Получить сумму тех чисел данной последовательности, которые кратны 5
Ответ Создать тему
Опции темы

Текущее время: 08:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru